<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		
	<span class="different-posts different-posts_earlier">📖 <a href="/page/48">earlier posts</a> 📖</span>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/77. Linux 命令- w/">Linux 命令- w</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;w命令用于显示已经登陆系统的用户列表，并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人，以及他们正在执行的程序。单独执行w命令会显示所有的用户，您也可指定用户名称，仅显示某位用户的相关信息。</p>
<h2 id="命令格式"><a href="#命令格式" class="headerlink" title="命令格式"></a>命令格式</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">w [参数] [用户名称]</div></pre></td></tr></table></figure>
<h2 id="命令选项"><a href="#命令选项" class="headerlink" title="命令选项"></a>命令选项</h2><ul>
<li>-f 　开启或关闭显示用户从何处登入系统。 </li>
<li>-h 　不显示各栏位的标题信息列。 </li>
<li>-l 　使用详细格式列表，此为预设值。 </li>
<li>-s 　使用简洁格式列表，不显示用户登入时间，终端机阶段作业和程序所耗费的CPU时间。 </li>
<li>-u 　忽略执行程序的名称，以及该程序耗费CPU时间的信息。 </li>
<li>-V 　显示版本信息。 </li>
</ul>
<h2 id="命令功能"><a href="#命令功能" class="headerlink" title="命令功能"></a>命令功能</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;显示目前登入系统的用户信息。 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;执行这项指令可得知目前登入系统的用户有那些人，以及他们正在执行的程序。单独执行w<br>指令会显示所有的用户，您也可指定用户名称，仅显示某位用户的相关信息。 </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;w命令也用于显示登录到系统的用户情况，但是与who不同的是，w命令功能更加强大，它不但可以显示有谁登录到系统，还可以显示出这些用户当前正在进行的工作，感觉比较实用，具体用法如下： </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;w命令的显示项目按以下顺序排列：当前时间，系统启动到现在的时间，登录用户的数目，系统在最 近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据，项目显示顺序如下：登录帐号、终端名称、远 程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。 </p>
<h2 id="使用实例"><a href="#使用实例" class="headerlink" title="使用实例"></a>使用实例</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># w </span></div><div class="line">20:39:37 up 136 days, 3:58, 1 user, load average: 0.00, 0.00, 0.00 </div><div class="line">USER   TTY     FROM             login@   IDLE    JCPU    PCPU   WHAT </div><div class="line">root   pts/0   222.94.97.122   20:39    1.00s   0.00s   0.00s   w</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;linux管理员最常用的命令就是这个 <code>w</code> 了，该命令显示的信息还是蛮丰富的。第一行从左面开始显示的信息依次为：时间，系统运行时间，登录用户数，平均负载。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;第二行开始以及下面所有的行，告诉我们的信息是，当前登录的都有哪些用户，以及他们是从哪里登录的等等。</p>
<ul>
<li>USER：登录用户名</li>
<li>TTY：登录后系统分配的终端号</li>
<li>FROM：远程主机名，即从哪里登录的</li>
<li>LOGIN@：何时登录</li>
<li>IDLE：用户空间时间，这是个计时器，一旦用户执行任何操作，该计时器便会被重置</li>
<li>JCPU：和该终端连接的所有进程占用时间。包括当前正在运行的后台作业占用时间</li>
<li>PCPU：当前进程所占用的时间</li>
<li>WHAT：当前正在运行进程的命令行</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在这些信息中，我们最应该关注的应该是第一行中的 ‘load average:’ 后面的三个数值。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;第一个数值表示1分钟内系统的平均负载值；第二个数值表示5分钟内系统的平均负载值；第三个数值表示15分钟系统的平均负载值。这个值的意义是，单位时间段内CPU活动进程数。当然这个值越大就说明服务器压力越大。一般情况下这个值只要不超过服务器的cpu数量就没有关系，如果服务器cpu数量为8，那么这个值若小于8，就说明当前服务器没有压力，否则就要关注一下了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;怎么查看服务器有几个cpu</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;命令：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">grep -c <span class="string">'processor'</span> /proc/cpuinfo</div></pre></td></tr></table></figure>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-w/01.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;‘/proc/cpuinfo’ 这个文件记录了cpu的详细信息。目前市面上的服务器通常都是2颗4核cpu，在linux看来，它就是8个cpu。查看这个文件时则会显示8段类似的信息，而最后一段信息中processor : 后面跟的是 ‘7’ 所以查看当前系统有几个cpu，我们可以使用这个命令： grep -c ‘processor’ /proc/cpuinfo 而如何看几颗物理cpu呢，需要查看关键字 “physical id”</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;另外，uptime命令同样可以查看系统负载。实际上uptime得出的结果和w的第一行是一致的。</p>
<h2 id="备注"><a href="#备注" class="headerlink" title="备注"></a>备注</h2><p>1) 区别于<code>who</code>命令，<code>w</code>命令不仅可以看到登录服务器的用户信息，而且可以看到这些用户做了什么<br>2) <code>who am i</code>命令，显示出自己在系统中的用户名，登录终端，登录时间<br>3) <code>whoami</code>命令，显示自己在系统中的用户名<br>4) <code>logname</code>命令，可以显示自己初次登录到系统中的用户名，主要识别sudo前后情形<br>5) <code>last</code>命令，查看最近1个月用户登录服务器的情况<br>6) <code>tty</code>命令，来查看所连接的设备或终端</p>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/75. Linux 磁盘管理/">Linux 磁盘管理</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux磁盘管理好坏管理直接关系到整个系统的性能问题。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux磁盘管理常用三个命令为df、du和fdisk。</p>
<ul>
<li>df：列出文件系统的整体磁盘使用量</li>
<li>du：检查磁盘空间使用量</li>
<li>fdisk：用于磁盘分区</li>
</ul>
<h2 id="df"><a href="#df" class="headerlink" title="df"></a>df</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;df命令参数功能：检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间，目前还剩下多少空间等信息。</p>
<h3 id="语法："><a href="#语法：" class="headerlink" title="语法："></a>语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">df [-ahikHTm] [目录或文件名]</div></pre></td></tr></table></figure>
<h3 id="选项与参数："><a href="#选项与参数：" class="headerlink" title="选项与参数："></a>选项与参数：</h3><ul>
<li>-a ：列出所有的文件系统，包括系统特有的 /proc 等文件系统；</li>
<li>-k ：以 KBytes 的容量显示各文件系统；</li>
<li>-m ：以 MBytes 的容量显示各文件系统；</li>
<li>-h ：以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示；</li>
<li>-H ：以 M=1000K 取代 M=1024K 的进位方式；</li>
<li>-T ：显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出；</li>
<li>-i ：不用硬盘容量，而以 inode 的数量来显示</li>
</ul>
<h3 id="使用实例"><a href="#使用实例" class="headerlink" title="使用实例"></a>使用实例</h3><h4 id="实例1：将系统内所有的文件系统列出来！"><a href="#实例1：将系统内所有的文件系统列出来！" class="headerlink" title="实例1：将系统内所有的文件系统列出来！"></a>实例1：将系统内所有的文件系统列出来！</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># df</span></div><div class="line">Filesystem      1K-blocks      Used Available Use% Mounted on</div><div class="line">/dev/hdc2         9920624   3823112   5585444  41% /</div><div class="line">/dev/hdc3         4956316    141376   4559108   4% /home</div><div class="line">/dev/hdc1          101086     11126     84741  12% /boot</div><div class="line">tmpfs              371332         0    371332   0% /dev/shm</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在 Linux 底下如果 df 没有加任何选项，那么默认会将系统内所有的 (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来！</p>
<h4 id="实例2-将容量结果以易读的容量格式显示出来"><a href="#实例2-将容量结果以易读的容量格式显示出来" class="headerlink" title="实例2:将容量结果以易读的容量格式显示出来"></a>实例2:将容量结果以易读的容量格式显示出来</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># df -h</span></div><div class="line">Filesystem            Size  Used Avail Use% Mounted on</div><div class="line">/dev/hdc2             9.5G  3.7G  5.4G  41% /</div><div class="line">/dev/hdc3             4.8G  139M  4.4G   4% /home</div><div class="line">/dev/hdc1              99M   11M   83M  12% /boot</div><div class="line">tmpfs                 363M     0  363M   0% /dev/shm</div></pre></td></tr></table></figure>
<h4 id="实例3-将系统内的所有特殊文件格式及名称都列出来"><a href="#实例3-将系统内的所有特殊文件格式及名称都列出来" class="headerlink" title="实例3:将系统内的所有特殊文件格式及名称都列出来"></a>实例3:将系统内的所有特殊文件格式及名称都列出来</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># df -aT</span></div><div class="line">Filesystem    Type 1K-blocks    Used Available Use% Mounted on</div><div class="line">/dev/hdc2     ext3   9920624 3823112   5585444  41% /</div><div class="line">proc          proc         0       0         0   -  /proc</div><div class="line">sysfs        sysfs         0       0         0   -  /sys</div><div class="line">devpts      devpts         0       0         0   -  /dev/pts</div><div class="line">/dev/hdc3     ext3   4956316  141376   4559108   4% /home</div><div class="line">/dev/hdc1     ext3    101086   11126     84741  12% /boot</div><div class="line">tmpfs        tmpfs    371332       0    371332   0% /dev/shm</div><div class="line">none   binfmt_misc         0       0         0   -  /proc/sys/fs/binfmt_misc</div><div class="line">sunrpc  rpc_pipefs         0       0         0   -  /var/lib/nfs/rpc_pipefs</div></pre></td></tr></table></figure>
<h4 id="实例4-将-etc-底下的可用的磁盘容量以易读的容量格式显示"><a href="#实例4-将-etc-底下的可用的磁盘容量以易读的容量格式显示" class="headerlink" title="实例4:将 /etc 底下的可用的磁盘容量以易读的容量格式显示"></a>实例4:将 /etc 底下的可用的磁盘容量以易读的容量格式显示</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># df -h /etc</span></div><div class="line">Filesystem            Size  Used Avail Use% Mounted on</div><div class="line">/dev/hdc2             9.5G  3.7G  5.4G  41% /</div></pre></td></tr></table></figure>
<h2 id="du"><a href="#du" class="headerlink" title="du"></a>du</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux du命令也是查看使用空间的，但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看，还是和df命令有一些区别的，这里介绍Linux du命令。</p>
<h3 id="语法：-1"><a href="#语法：-1" class="headerlink" title="语法："></a>语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">du [-ahskm] 文件或目录名称</div></pre></td></tr></table></figure>
<h3 id="选项与参数：-1"><a href="#选项与参数：-1" class="headerlink" title="选项与参数："></a>选项与参数：</h3><ul>
<li>-a ：列出所有的文件与目录容量，因为默认仅统计目录底下的文件量而已。</li>
<li>-h ：以人们较易读的容量格式 (G/M) 显示；</li>
<li>-s ：列出总量而已，而不列出每个各别的目录占用容量；</li>
<li>-S ：不包括子目录下的总计，与 -s 有点差别。</li>
<li>-k ：以 KBytes 列出容量显示；</li>
<li>-m ：以 MBytes 列出容量显示；</li>
</ul>
<h3 id="实例1-列出目前目录下的所有文件容量"><a href="#实例1-列出目前目录下的所有文件容量" class="headerlink" title="实例1:列出目前目录下的所有文件容量"></a>实例1:列出目前目录下的所有文件容量</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># du</span></div><div class="line">8       ./test4     &lt;==每个目录都会列出来</div><div class="line">8       ./test2</div><div class="line">....中间省略....</div><div class="line">12      ./.gconfd   &lt;==包括隐藏文件的目录</div><div class="line">220     .           &lt;==这个目录(.)所占用的总量</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;直接输入 du 没有加任何选项时，则 du 会分析当前所在目录的文件与目录所占用的硬盘空间。</p>
<h3 id="实例2-将文件的容量也列出来"><a href="#实例2-将文件的容量也列出来" class="headerlink" title="实例2:将文件的容量也列出来"></a>实例2:将文件的容量也列出来</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># du -a</span></div><div class="line">12      ./install.log.syslog   &lt;==有文件的列表了</div><div class="line">8       ./.bash_logout</div><div class="line">8       ./test4</div><div class="line">8       ./test2</div><div class="line">....中间省略....</div><div class="line">12      ./.gconfd</div><div class="line">220     .</div></pre></td></tr></table></figure>
<h3 id="实例-3检查根目录底下每个目录所占用的容量"><a href="#实例-3检查根目录底下每个目录所占用的容量" class="headerlink" title="实例:3检查根目录底下每个目录所占用的容量"></a>实例:3检查根目录底下每个目录所占用的容量</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># du -sm /*</span></div><div class="line">7       /bin</div><div class="line">6       /boot</div><div class="line">.....中间省略....</div><div class="line">0       /proc</div><div class="line">.....中间省略....</div><div class="line">1       /tmp</div><div class="line">3859    /usr     &lt;==系统初期最大就是他了啦！</div><div class="line">77      /var</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;通配符 * 来代表每个目录。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;与 df 不一样的是，du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。</p>
<h2 id="fdisk"><a href="#fdisk" class="headerlink" title="fdisk"></a>fdisk</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fdisk 是 Linux 的磁盘分区表操作工具。</p>
<h3 id="语法：-2"><a href="#语法：-2" class="headerlink" title="语法："></a>语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">fdisk [-l] 装置名称</div></pre></td></tr></table></figure>
<h3 id="选项与参数：-2"><a href="#选项与参数：-2" class="headerlink" title="选项与参数："></a>选项与参数：</h3><ul>
<li>-l ：输出后面接的装置所有的分区内容。若仅有 fdisk -l 时， 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。</li>
</ul>
<h3 id="实例1-列出所有分区信息"><a href="#实例1-列出所有分区信息" class="headerlink" title="实例1:列出所有分区信息"></a>实例1:列出所有分区信息</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">[root@AY120919111755c246621 tmp]<span class="comment"># fdisk -l</span></div><div class="line"></div><div class="line">Disk /dev/xvda: 21.5 GB, 21474836480 bytes</div><div class="line">255 heads, 63 sectors/track, 2610 cylinders</div><div class="line">Units = cylinders of 16065 * 512 = 8225280 bytes</div><div class="line">Sector size (logical/physical): 512 bytes / 512 bytes</div><div class="line">I/O size (minimum/optimal): 512 bytes / 512 bytes</div><div class="line">Disk identifier: 0x00000000</div><div class="line"></div><div class="line">    Device Boot      Start         End      Blocks   Id  System</div><div class="line">/dev/xvda1   *           1        2550    20480000   83  Linux</div><div class="line">/dev/xvda2            2550        2611      490496   82  Linux swap / Solaris</div><div class="line"></div><div class="line">Disk /dev/xvdb: 21.5 GB, 21474836480 bytes</div><div class="line">255 heads, 63 sectors/track, 2610 cylinders</div><div class="line">Units = cylinders of 16065 * 512 = 8225280 bytes</div><div class="line">Sector size (logical/physical): 512 bytes / 512 bytes</div><div class="line">I/O size (minimum/optimal): 512 bytes / 512 bytes</div><div class="line">Disk identifier: 0x56f40944</div><div class="line"></div><div class="line">    Device Boot      Start         End      Blocks   Id  System</div><div class="line">/dev/xvdb2               1        2610    20964793+  83  Linux</div></pre></td></tr></table></figure>
<h3 id="实例2-找出你系统中的根目录所在磁盘，并查阅该硬盘内的相关信息"><a href="#实例2-找出你系统中的根目录所在磁盘，并查阅该硬盘内的相关信息" class="headerlink" title="实例2:找出你系统中的根目录所在磁盘，并查阅该硬盘内的相关信息"></a>实例2:找出你系统中的根目录所在磁盘，并查阅该硬盘内的相关信息</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># df /            &lt;==注意：重点在找出磁盘文件名而已</span></div><div class="line">Filesystem           1K-blocks      Used Available Use% Mounted on</div><div class="line">/dev/hdc2              9920624   3823168   5585388  41% /</div><div class="line"></div><div class="line">[root@www ~]<span class="comment"># fdisk /dev/hdc  &lt;==仔细看，不要加上数字喔！</span></div><div class="line">The number of cylinders <span class="keyword">for</span> this disk is <span class="built_in">set</span> to 5005.</div><div class="line">There is nothing wrong with that, but this is larger than 1024,</div><div class="line">and could <span class="keyword">in</span> certain setups cause problems with:</div><div class="line">1) software that runs at boot time (e.g., old versions of LILO)</div><div class="line">2) booting and partitioning software from other OSs</div><div class="line">   (e.g., DOS FDISK, OS/2 FDISK)</div><div class="line"></div><div class="line">Command (m <span class="keyword">for</span> <span class="built_in">help</span>):     &lt;==等待你的输入！</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;输入 m 后，就会看到底下这些命令介绍</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line">Command (m <span class="keyword">for</span> <span class="built_in">help</span>): m   &lt;== 输入 m 后，就会看到底下这些命令介绍</div><div class="line">Command action</div><div class="line">   a   toggle a bootable flag</div><div class="line">   b   edit bsd disklabel</div><div class="line">   c   toggle the dos compatibility flag</div><div class="line">   d   delete a partition            &lt;==删除一个partition</div><div class="line">   l   list known partition types</div><div class="line">   m   <span class="built_in">print</span> this menu</div><div class="line">   n   add a new partition           &lt;==新增一个partition</div><div class="line">   o   create a new empty DOS partition table</div><div class="line">   p   <span class="built_in">print</span> the partition table     &lt;==在屏幕上显示分割表</div><div class="line">   q   quit without saving changes   &lt;==不储存离开fdisk程序</div><div class="line">   s   create a new empty Sun disklabel</div><div class="line">   t   change a partition<span class="string">'s system id</span></div><div class="line"><span class="string">   u   change display/entry units</span></div><div class="line"><span class="string">   v   verify the partition table</span></div><div class="line"><span class="string">   w   write table to disk and exit  &lt;==将刚刚的动作写入分割表</span></div><div class="line"><span class="string">   x   extra functionality (experts only)</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;离开 fdisk 时按下 q，那么所有的动作都不会生效！相反的， 按下w就是动作生效的意思。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line">Command (m <span class="keyword">for</span> <span class="built_in">help</span>): p  &lt;== 这里可以输出目前磁盘的状态</div><div class="line"></div><div class="line">Disk /dev/hdc: 41.1 GB, 41174138880 bytes        &lt;==这个磁盘的文件名与容量</div><div class="line">255 heads, 63 sectors/track, 5005 cylinders      &lt;==磁头、扇区与磁柱大小</div><div class="line">Units = cylinders of 16065 * 512 = 8225280 bytes &lt;==每个磁柱的大小</div><div class="line"></div><div class="line">   Device Boot      Start         End      Blocks   Id  System</div><div class="line">/dev/hdc1   *           1          13      104391   83  Linux</div><div class="line">/dev/hdc2              14        1288    10241437+  83  Linux</div><div class="line">/dev/hdc3            1289        1925     5116702+  83  Linux</div><div class="line">/dev/hdc4            1926        5005    24740100    5  Extended</div><div class="line">/dev/hdc5            1926        2052     1020096   82  Linux swap / Solaris</div><div class="line"><span class="comment"># 装置文件名 启动区否 开始磁柱    结束磁柱  1K大小容量 磁盘分区槽内的系统</span></div><div class="line"></div><div class="line">Command (m <span class="keyword">for</span> <span class="built_in">help</span>): q</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;想要不储存离开吗？按下 q 就对了！不要随便按 w 啊！</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;使用 p 可以列出目前这颗磁盘的分割表信息，这个信息的上半部在显示整体磁盘的状态。</p>
<h2 id="磁盘格式化"><a href="#磁盘格式化" class="headerlink" title="磁盘格式化"></a>磁盘格式化</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;磁盘分割完毕后自然就是要进行文件系统的格式化，格式化的命令非常的简单，使用 mkfs（make filesystem） 命令。</p>
<h3 id="语法：-3"><a href="#语法：-3" class="headerlink" title="语法："></a>语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mkfs [-t 文件系统格式] 装置文件名</div></pre></td></tr></table></figure>
<h3 id="选项与参数：-3"><a href="#选项与参数：-3" class="headerlink" title="选项与参数："></a>选项与参数：</h3><ul>
<li>-t ：可以接文件系统格式，例如 ext3, ext2, vfat 等(系统有支持才会生效)</li>
</ul>
<h3 id="实例1-查看-mkfs-支持的文件格式"><a href="#实例1-查看-mkfs-支持的文件格式" class="headerlink" title="实例1:查看 mkfs 支持的文件格式"></a>实例1:查看 mkfs 支持的文件格式</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># mkfs[tab][tab]</span></div><div class="line">mkfs         mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.msdos   mkfs.vfat</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;按下两个[tab]，会发现 mkfs 支持的文件格式如上所示。</p>
<h3 id="实例-将分区-dev-hdc6（可指定你自己的分区）-格式化为-ext3-文件系统："><a href="#实例-将分区-dev-hdc6（可指定你自己的分区）-格式化为-ext3-文件系统：" class="headerlink" title="实例:将分区 /dev/hdc6（可指定你自己的分区） 格式化为 ext3 文件系统："></a>实例:将分区 /dev/hdc6（可指定你自己的分区） 格式化为 ext3 文件系统：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># mkfs -t ext3 /dev/hdc6</span></div><div class="line">mke2fs 1.39 (29-May-2006)</div><div class="line">Filesystem label=                &lt;==这里指的是分割槽的名称(label)</div><div class="line">OS <span class="built_in">type</span>: Linux</div><div class="line">Block size=4096 (<span class="built_in">log</span>=2)          &lt;==block 的大小配置为 4K </div><div class="line">Fragment size=4096 (<span class="built_in">log</span>=2)</div><div class="line">251392 inodes, 502023 blocks     &lt;==由此配置决定的inode/block数量</div><div class="line">25101 blocks (5.00%) reserved <span class="keyword">for</span> the super user</div><div class="line">First data block=0</div><div class="line">Maximum filesystem blocks=515899392</div><div class="line">16 block groups</div><div class="line">32768 blocks per group, 32768 fragments per group</div><div class="line">15712 inodes per group</div><div class="line">Superblock backups stored on blocks:</div><div class="line">        32768, 98304, 163840, 229376, 294912</div><div class="line"></div><div class="line">Writing inode tables: <span class="keyword">done</span></div><div class="line">Creating journal (8192 blocks): <span class="keyword">done</span> &lt;==有日志记录</div><div class="line">Writing superblocks and filesystem accounting information: <span class="keyword">done</span></div><div class="line"></div><div class="line">This filesystem will be automatically checked every 34 mounts or</div><div class="line">180 days, whichever comes first.  Use tune2fs -c or -i to override.</div><div class="line"><span class="comment"># 这样就创建起来我们所需要的 Ext3 文件系统了！简单明了！</span></div></pre></td></tr></table></figure>
<h2 id="磁盘检验"><a href="#磁盘检验" class="headerlink" title="磁盘检验"></a>磁盘检验</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;fsck（file system check）用来检查和维护不一致的文件系统。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;若系统掉电或磁盘发生问题，可利用fsck命令对文件系统进行检查。</p>
<h3 id="语法：-4"><a href="#语法：-4" class="headerlink" title="语法："></a>语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">fsck [-t 文件系统] [-ACay] 装置名称</div></pre></td></tr></table></figure>
<h3 id="选项与参数：-4"><a href="#选项与参数：-4" class="headerlink" title="选项与参数："></a>选项与参数：</h3><ul>
<li>-t : 给定档案系统的型式，若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数</li>
<li>-s : 依序一个一个地执行 fsck 的指令来检查</li>
<li>-A : 对/etc/fstab 中所有列出来的 分区（partition）做检查</li>
<li>-C : 显示完整的检查进度</li>
<li>-d : 打印出 e2fsck 的 debug 结果</li>
<li>-p : 同时有 -A 条件时，同时有多个 fsck 的检查一起执行</li>
<li>-R : 同时有 -A 条件时，省略 / 不检查</li>
<li>-V : 详细显示模式</li>
<li>-a : 如果检查有错则自动修复</li>
<li>-r : 如果检查有错则由使用者回答是否修复</li>
<li>-y : 选项指定检测每个文件是自动输入yes，在不确定那些是不正常的时候，可以执行 # fsck -y 全部检查修复。</li>
</ul>
<h3 id="实例1-查看系统有多少文件系统支持的-fsck-命令："><a href="#实例1-查看系统有多少文件系统支持的-fsck-命令：" class="headerlink" title="实例1:查看系统有多少文件系统支持的 fsck 命令："></a>实例1:查看系统有多少文件系统支持的 fsck 命令：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># fsck[tab][tab]</span></div><div class="line">fsck         fsck.cramfs  fsck.ext2    fsck.ext3    fsck.msdos   fsck.vfat</div></pre></td></tr></table></figure>
<h3 id="实例-强制检测-dev-hdc6-分区"><a href="#实例-强制检测-dev-hdc6-分区" class="headerlink" title="实例:强制检测 /dev/hdc6 分区:"></a>实例:强制检测 /dev/hdc6 分区:</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># fsck -C -f -t ext3 /dev/hdc6 </span></div><div class="line">fsck 1.39 (29-May-2006)</div><div class="line">e2fsck 1.39 (29-May-2006)</div><div class="line">Pass 1: Checking inodes, blocks, and sizes</div><div class="line">Pass 2: Checking directory structure</div><div class="line">Pass 3: Checking directory connectivity</div><div class="line">Pass 4: Checking reference counts</div><div class="line">Pass 5: Checking group summary information</div><div class="line">vbird_logical: 11/251968 files (9.1% non-contiguous), 36926/1004046 blocks</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果没有加上 -f 的选项，则由于这个文件系统不曾出现问题，检查的经过非常快速！若加上 -f 强制检查，才会一项一项的显示过程。</p>
<h2 id="磁盘挂载与卸除"><a href="#磁盘挂载与卸除" class="headerlink" title="磁盘挂载与卸除"></a>磁盘挂载与卸除</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Linux 的磁盘挂载使用 mount 命令，卸载使用 umount 命令。</p>
<h3 id="磁盘挂载语法："><a href="#磁盘挂载语法：" class="headerlink" title="磁盘挂载语法："></a>磁盘挂载语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点</div></pre></td></tr></table></figure>
<h3 id="实例1-用默认的方式，将刚刚创建的-dev-hdc6-挂载到-mnt-hdc6-上面！"><a href="#实例1-用默认的方式，将刚刚创建的-dev-hdc6-挂载到-mnt-hdc6-上面！" class="headerlink" title="实例1:用默认的方式，将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面！"></a>实例1:用默认的方式，将刚刚创建的 /dev/hdc6 挂载到 /mnt/hdc6 上面！</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># mkdir /mnt/hdc6</span></div><div class="line">[root@www ~]<span class="comment"># mount /dev/hdc6 /mnt/hdc6</span></div><div class="line">[root@www ~]<span class="comment"># df</span></div><div class="line">Filesystem           1K-blocks      Used Available Use% Mounted on</div><div class="line">.....中间省略.....</div><div class="line">/dev/hdc6              1976312     42072   1833836   3% /mnt/hdc6</div></pre></td></tr></table></figure>
<h3 id="磁盘卸载命令-umount-语法："><a href="#磁盘卸载命令-umount-语法：" class="headerlink" title="磁盘卸载命令 umount 语法："></a>磁盘卸载命令 umount 语法：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">umount [-fn] 装置文件名或挂载点</div></pre></td></tr></table></figure>
<h3 id="选项与参数：-5"><a href="#选项与参数：-5" class="headerlink" title="选项与参数："></a>选项与参数：</h3><ul>
<li>-f ：强制卸除！可用在类似网络文件系统 (NFS) 无法读取到的情况下；</li>
<li>-n ：不升级 /etc/mtab 情况下卸除。</li>
</ul>
<h3 id="卸载-dev-hdc6"><a href="#卸载-dev-hdc6" class="headerlink" title="卸载/dev/hdc6"></a>卸载/dev/hdc6</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># umount /dev/hdc6</span></div></pre></td></tr></table></figure>
	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/74. Linux 命令- rpm/">Linux 命令- rpm</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;rpm命令是RPM软件包的管理工具。RPM是 “Redhat Package Manager” 的缩写，根据名字也能猜到这是Redhat公司开发出来的。RPM 是以一种数据库记录的方式来将需要的套件安装到Linux 主机的一套管理程序。也就是说，linux系统中存在着一个关于RPM的数据库，它记录了安装的包以及包与包之间依赖相关性。RPM包是预先在linux机器上编译好并打包好的文件，安装起来非常快捷。但是也有一些缺点，比如安装的环境必须与编译时的环境一致或者相当；包与包之间存在着相互依赖的情况；卸载包时需要先把依赖的包卸载掉，如果依赖的包是系统所必须的，那就不能卸载这个包，否则会造成系统崩溃。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果光驱中还有系统安装盘的话，可以通过 mount /dev/cdrom /mnt 命令把光驱挂载到/mnt目录下，那么会在/mnt/Packages目录下看到很多.rpm的文件，这就是RPM包了。</p>
<h2 id="命令格式"><a href="#命令格式" class="headerlink" title="命令格式"></a>命令格式</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm [选项] [参数]</div></pre></td></tr></table></figure>
<h2 id="命令选项"><a href="#命令选项" class="headerlink" title="命令选项"></a>命令选项</h2><ul>
<li>-a：查询所有套件； </li>
<li>-b&lt;完成阶段&gt;&lt;套件档&gt;+或-t &lt;完成阶段&gt;&lt;套件档&gt;+：设置包装套件的完成阶段，并指定套件档的文件名称； </li>
<li>-c：只列出组态配置文件，本参数需配合”-l”参数使用； </li>
<li>-d：只列出文本文件，本参数需配合”-l”参数使用； </li>
<li>-e&lt;套件档&gt;或–erase&lt;套件档&gt;：删除指定的套件； </li>
<li>-f&lt;文件&gt;+：查询拥有指定文件的套件；</li>
<li>-h或–hash：套件安装时列出标记； </li>
<li>-i：显示套件的相关信息； </li>
<li>-i&lt;套件档&gt;或–install&lt;套件档&gt;：安装指定的套件档； </li>
<li>-l：显示套件的文件列表； </li>
<li>-p&lt;套件档&gt;+：查询指定的RPM套件档； </li>
<li>-q：使用询问模式，当遇到任何问题时，rpm指令会先询问用户； </li>
<li>-R：显示套件的关联性信息； </li>
<li>-s：显示文件状态，本参数需配合”-l”参数使用； </li>
<li>-U&lt;套件档&gt;或–upgrade&lt;套件档&gt;：升级指定的套件档； </li>
<li>-v：显示指令执行过程； </li>
<li>-vv：详细显示指令执行过程，便于排错。</li>
</ul>
<h2 id="命令参数"><a href="#命令参数" class="headerlink" title="命令参数"></a>命令参数</h2><ul>
<li>软件包：指定要操纵的rpm软件包</li>
</ul>
<h2 id="使用实例"><a href="#使用实例" class="headerlink" title="使用实例"></a>使用实例</h2><h3 id="实例1：安装一个rpm"><a href="#实例1：安装一个rpm" class="headerlink" title="实例1：安装一个rpm"></a>实例1：安装一个rpm</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># rpm -ivh /mnt/Packages/libjpeg-turbo-devel-1.2.1-1.el6.i686.rpm</span></div><div class="line">Preparing... <span class="comment">########################################### [100%]</span></div><div class="line">1:libjpeg-turbo-devel <span class="comment">########################################### [100%]</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;其中libhpeg-turbo-devel-1.2.1-1，el6.i686.rpm 是rpm包的文件名。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;另外在安装一个rpm常用的附带参数：</p>
<ul>
<li><strong>–force</strong>:强制安装，即使覆盖属于其他包的文件也要安装</li>
<li><strong>nodeps</strong>：当要安装的rpm包依赖其他包时，几十其他包没有安装，也要安装这个包</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;也就是说 <code>rpm -i --force --nodeps</code> 可以忽略所有依赖关系和文件问题，什么包都能安装上，但这种强制安装的软件包不能保证完全发挥功能。</p>
<h3 id="实例2：升级一个rpm包"><a href="#实例2：升级一个rpm包" class="headerlink" title="实例2：升级一个rpm包"></a>实例2：升级一个rpm包</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -Uvh filename</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;“-U”即升级的意思</p>
<h3 id="实例3：卸载一个rpm包"><a href="#实例3：卸载一个rpm包" class="headerlink" title="实例3：卸载一个rpm包"></a>实例3：卸载一个rpm包</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -e filename</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># rpm -qa |grep libjpeg-turbo-devel</span></div><div class="line">libjpeg-turbo-devel-1.2.1-1.el6.i686</div><div class="line">[root@localhost ~]<span class="comment"># rpm -e libjpeg-turbo-devel</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong><br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这里的filename是通过rpm的查询功能所查询到的。卸载时后边跟的filename和安装时的是有区别的，安装时是把一个存在的文件作为参数，而卸载时只需要包名即可。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有时会出现一些错误或者警告</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">... is needed by ...</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这说明这个软件被其他软件需要，不能随便卸载，可以用 <code>rpm -e --nodeps</code> 强制卸载</p>
<h3 id="实例4：如何安装-src-rpm软件包"><a href="#实例4：如何安装-src-rpm软件包" class="headerlink" title="实例4：如何安装.src.rpm软件包"></a>实例4：如何安装.src.rpm软件包</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有些rpm包是以 .src.rpm结尾的，这类rpm包是包含了源代码的rpm包，在安装时需要进行编译。这类rpm包有两种方法安装：</p>
<h4 id="方法一："><a href="#方法一：" class="headerlink" title="方法一："></a>方法一：</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">rpm -i your-package.src.rpm </div><div class="line"><span class="built_in">cd</span> /usr/src/redhat/SPECS </div><div class="line">rpmbuild -bp your-package.specs <span class="comment">#一个和软件包同名的specs文件 </span></div><div class="line"><span class="built_in">cd</span> /usr/src/redhat/BUILD/your-package/ <span class="comment">#一个和软件包同名的目录 </span></div><div class="line">./configure <span class="comment">#这一步和编译普通的源码软件一样，可以加上参数 </span></div><div class="line">make </div><div class="line">make install</div></pre></td></tr></table></figure>
<h4 id="方法二："><a href="#方法二：" class="headerlink" title="方法二："></a>方法二：</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">rpm -i you-package.src.rpm </div><div class="line"><span class="built_in">cd</span> /usr/src/redhat/SPECS</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;前两步和方法一相同</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpmbuild -bb your-package.specs   <span class="comment">#一个和软件包同名的specs文件</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这是在 <code>/usr/src/redhat/RPM/i386/</code>（根据提提包的不同，也可能是i686、noarch等等）在这个目录下，有一个新的rpm包，这个是编译好的二进制文件。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;执行 <code>rpm -i new-package.rpm</code>即可安装完成。</p>
<h3 id="实例5：不安装但是获取rpm包中的文件"><a href="#实例5：不安装但是获取rpm包中的文件" class="headerlink" title="实例5：不安装但是获取rpm包中的文件"></a>实例5：不安装但是获取rpm包中的文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;需要使用工具 <code>rpm2cpio</code>和<code>cpio</code></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">rpm2cpio xxx.rpm | cpio -vi</div><div class="line">rpm2cpio xxx.rpm | cpio -idmv</div><div class="line">rpm2cpio xxx.rpm | cpio --extract --make-firectories</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;参数i和extract相同，表示提取文件。v表示显示执行进程，d和make-directory相同，表示根据包中文件原来的路径建立目录，m表示保持文件的更新时间。</p>
<h3 id="实例6：查看与rpm包相关的文件和其他信息"><a href="#实例6：查看与rpm包相关的文件和其他信息" class="headerlink" title="实例6：查看与rpm包相关的文件和其他信息"></a>实例6：查看与rpm包相关的文件和其他信息</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;假设使用rpm包<code>mysql-3.23.54a-11</code></p>
<h4 id="1-列出系统中所有安装过的rpm包"><a href="#1-列出系统中所有安装过的rpm包" class="headerlink" title="1. 列出系统中所有安装过的rpm包"></a>1. 列出系统中所有安装过的rpm包</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -qa</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;查找所有安装过的包含某个字符串sql的rpm包</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -qa | grep sql</div></pre></td></tr></table></figure>
<h4 id="2-获得某个rpm包的文件全名"><a href="#2-获得某个rpm包的文件全名" class="headerlink" title="2. 获得某个rpm包的文件全名"></a>2. 获得某个rpm包的文件全名</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -q mysql</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;可以获得系统中安装的mysql软件包全名，从中可以获得当前软件包的版本信息。此例可以得到信息 mysql-3.23.54a-11</p>
<h4 id="3-一个rpm包中的文件的安装路径"><a href="#3-一个rpm包中的文件的安装路径" class="headerlink" title="3. 一个rpm包中的文件的安装路径"></a>3. 一个rpm包中的文件的安装路径</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -ql 包名</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注意：这里的是不包括 .rpm 后缀的rpm包的名称，也就是说这能使用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了，也可以用which</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="built_in">which</span> mysql</div></pre></td></tr></table></figure>
<h4 id="4-一个rpm包中包含哪些文件。"><a href="#4-一个rpm包中包含哪些文件。" class="headerlink" title="4. 一个rpm包中包含哪些文件。"></a>4. 一个rpm包中包含哪些文件。</h4><ul>
<li>一个没有安装过的rpm包，使用 </li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -qlp ***.rpm</div></pre></td></tr></table></figure>
<ul>
<li>一个已经安装过的rpm包，还可以使用 </li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -ql ***.rpm</div></pre></td></tr></table></figure>
<h4 id="5-获取关于一个rpm包的版本，用途等相关信息"><a href="#5-获取关于一个rpm包的版本，用途等相关信息" class="headerlink" title="5. 获取关于一个rpm包的版本，用途等相关信息"></a>5. 获取关于一个rpm包的版本，用途等相关信息</h4><ul>
<li>一个没有安装过的rpm包，使用</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -qip ***.rpm</div></pre></td></tr></table></figure>
<ul>
<li>一个已经安装过的rpm包，还可以使用</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -qi ***.rpm</div></pre></td></tr></table></figure>
<h4 id="6-某个程序是哪个rpm包安装的，或者哪个rpm包包含这个程序"><a href="#6-某个程序是哪个rpm包安装的，或者哪个rpm包包含这个程序" class="headerlink" title="6. 某个程序是哪个rpm包安装的，或者哪个rpm包包含这个程序"></a>6. 某个程序是哪个rpm包安装的，或者哪个rpm包包含这个程序</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">rpm -qf `<span class="built_in">which</span> 程序名` <span class="comment">#返回软件包的全名 </span></div><div class="line">rpm -qif `<span class="built_in">which</span> 程序名` <span class="comment">#返回软件包的有关信息 </span></div><div class="line">rpm -qlf `<span class="built_in">which</span> 程序名` <span class="comment">#返回软件包的文件列表</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注意：这里不是引号，而是`(反引号)，就是键盘左上角那个键。也可以使用 <code>rpm -qilf</code>，同时输出rpm包信息和文件列表</p>
<h4 id="7-某个文件是哪个rpm包安装的，或者哪个rpm包包含这个文件。"><a href="#7-某个文件是哪个rpm包安装的，或者哪个rpm包包含这个文件。" class="headerlink" title="7. 某个文件是哪个rpm包安装的，或者哪个rpm包包含这个文件。"></a>7. 某个文件是哪个rpm包安装的，或者哪个rpm包包含这个文件。</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注意，前一个问题中的方法，只适用与可执行的程序，而下面的方法，不仅可以用于可执行程序，也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径，可以用whereis或者which，然后使用rpm -qf例如：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">whereis ftptop </div><div class="line">ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz </div><div class="line">rpm -qf /usr/bin/ftptop proftpd-1.2.8-1 </div><div class="line">rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt proftpd-1.2.8-1</div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/72. Linux 命令-vim/">Linux 命令- vim</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;所有的 Unix Like 系统都会内建 vi 文书编辑器，其他的文书编辑器则不一定存在。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;但是目前使用比较多的是 vim 编辑器。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vim 具有程序编辑的能力，可以主动的以字体颜色辨别语法的正确性，方便设计。</p>
<h2 id="什么是vim"><a href="#什么是vim" class="headerlink" title="什么是vim"></a>什么是vim</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Vim 是从 vi 发展出来的一个文本编辑器。代码补完、编辑及错误跳转等方便编程的功能特别丰富，在程序员中广泛使用。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;简单的来说，vi 是老式的字处理器，不公功能已经很齐全。vim 则可以说是程序开发者的一向很好用的工具。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;连<a href="http://www.vim.org" target="_blank" rel="external">vim官方网站</a>自己也说 vim 是一个程序开发工具而不是文字处理软件。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;vim 键盘图</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/01.gif?raw=true" alt="vim键盘图"><figcaption class="figure__caption">vim键盘图</figcaption></figure></p>
<h2 id="vim的使用"><a href="#vim的使用" class="headerlink" title="vim的使用"></a>vim的使用</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;基本上 vim 分为三种模式：<strong>命令模式（Command mode、编辑模式）、输入模式（Insert mode）和底线命令模式（Last line mode、末行模式）</strong>。三种模式的作用分别是：</p>
<h3 id="命令模式"><a href="#命令模式" class="headerlink" title="命令模式"></a>命令模式</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;用户刚刚启动 vim ，便计入了命令模式。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;此状态下敲击键盘动作会被 vim 识别为命令，而非输入字符。比如此时按 i ，并不回输入一个字符，i 被当作了一个命令。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;以下是常用的几个命令：</p>
<ul>
<li><strong>i</strong> 在当前光标所在字符的前面，转为输入模式；</li>
<li><strong>a</strong> 在当前光标所在字符的后面，转为输入模式；</li>
<li><strong>o</strong> 在当前光标所在行的下方，新建一行，并转为输入模式；</li>
<li><strong>I</strong> 在当前光标表所在行的行首，转为输入模式；</li>
<li><strong>A</strong> 在当前光标所在行的行尾，转为输入模式；</li>
<li><strong>O</strong> 在当前光标所在行的上方，新建一行，并转为输入模式；</li>
<li><strong>x</strong> 删除当前光标所在出的字符；</li>
<li><strong>：</strong> 切换到底线命令模式，以在最底一行输入命令；</li>
<li><strong>ESC</strong> 从输入模式切换为命令模式，也可是底线命令模式切换为命令模式。</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注：输入模式和底线命令模式之间不能直接切换。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;若想要编辑文本：启动 vim ，进入了命令模式，按下 i ，切换到输入模式。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;命令模式只有一些最基本的命令，因此仍要依靠底线命令模式输入更多命令。</p>
<h3 id="输入模式"><a href="#输入模式" class="headerlink" title="输入模式"></a>输入模式</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在命令模式下按下 <code>i</code> 就进入了输入模式。在输入模式中，可以使用以下按键：</p>
<ul>
<li><strong>字符按键以及Shift组合</strong>，输入字符</li>
<li><strong>ENTER</strong>，回车键，换行</li>
<li><strong>BACK SPACE</strong>，退格键，删除光标前一个字符</li>
<li><strong>DEL</strong>，删除键，删除光标后一个字符</li>
<li><strong>方向键</strong>，在文本中移动光标</li>
<li><strong>HOME/END</strong>,移动光标到行首/行尾</li>
<li><strong>Page Up/Page Down</strong>，上/下翻页</li>
<li><strong>Insert</strong>，切换光标为输入/替换模式，光标将变成竖线/下划线</li>
<li><strong>ESC</strong>，退出输入模式，切换到命令模式</li>
</ul>
<h3 id="底线命令模式"><a href="#底线命令模式" class="headerlink" title="底线命令模式"></a>底线命令模式</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在命令模式下按下 <code>:</code>（英文冒号）就进入了底线命令模式。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;底线命令模式可以输入单个或多个字符的命令，可用的命令非常多。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在底线命令模式中，基本的命令有：</p>
<ul>
<li><strong>q</strong>退出程序</li>
<li><strong>w</strong>保存文件</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;按ESC键可随时退出底线命令模式。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;可以将这三个模式想成下图来表示：</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/02.png?raw=true" alt=""></figure></p>
<h2 id="vim-使用实例"><a href="#vim-使用实例" class="headerlink" title="vim 使用实例"></a>vim 使用实例</h2><h3 id="使用-vim-进入命令模式"><a href="#使用-vim-进入命令模式" class="headerlink" title="使用 vim 进入命令模式"></a>使用 vim 进入命令模式</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;使用 vim 来建立一个名为 test.txt 的文件</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="comment"># vim test.txt</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;直接输入 <strong>vim文件名</strong>就能进入 vim 的命令模式了。vim 后面一定要加文件名，不管该文件存在与否。</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/03.jpg?raw=true" alt=""></figure></p>
<h3 id="按-i-进入输入模式（也称为编辑模式），开始编辑文字"><a href="#按-i-进入输入模式（也称为编辑模式），开始编辑文字" class="headerlink" title="按 i 进入输入模式（也称为编辑模式），开始编辑文字"></a>按 i 进入输入模式（也称为编辑模式），开始编辑文字</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在命令模式中，只要按下 i、o、a 等字符就可以进入输入模式了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在编辑模式当中，可以发现在左下角状态栏中会出现 <code>-INSERT-</code>的字样，那就是可以输入任意字符的提示。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这个时候，键盘上除了<code>ESC</code>这个键之外，其他的按键都可以视作为一般的输入按钮了，所以可以进行任意的编辑。</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/04.jpg?raw=true" alt=""></figure></p>
<h3 id="按下ESC按键回到一般模式"><a href="#按下ESC按键回到一般模式" class="headerlink" title="按下ESC按键回到一般模式"></a>按下ESC按键回到一般模式</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果编辑完毕，就按下<code>ESC</code>这个按键即可马上回到命令模式，这是左下角的 <code>-INSERT-</code>不见了</p>
<h3 id="在命令模式中，按下-wq保存后退出-vim"><a href="#在命令模式中，按下-wq保存后退出-vim" class="headerlink" title="在命令模式中，按下:wq保存后退出 vim"></a>在命令模式中，按下<code>:wq</code>保存后退出 vim</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;保存并退出的指令很简单，输入<code>:wq</code>即可保存并退出。</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/05.jpg?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这样就成功创建了一个 test.txt文件。</p>
<h2 id="vim-按键说明"><a href="#vim-按键说明" class="headerlink" title="vim 按键说明"></a>vim 按键说明</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;除了以上简易范例的 i、ESC、:wq 之外，其实 vim 还有非常多的按键可以使用。</p>
<h3 id="第一部分：命令模式可用的光标移动、复制粘贴、搜索替换等"><a href="#第一部分：命令模式可用的光标移动、复制粘贴、搜索替换等" class="headerlink" title="第一部分：命令模式可用的光标移动、复制粘贴、搜索替换等"></a>第一部分：命令模式可用的光标移动、复制粘贴、搜索替换等</h3><p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/06.jpg?raw=true" alt=""></figure></p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/07.jpg?raw=true" alt=""></figure></p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/08.jpg?raw=true" alt=""></figure></p>
<h3 id="第二部分：命令模式切换到编辑模式的可以用按键说明"><a href="#第二部分：命令模式切换到编辑模式的可以用按键说明" class="headerlink" title="第二部分：命令模式切换到编辑模式的可以用按键说明"></a>第二部分：命令模式切换到编辑模式的可以用按键说明</h3><p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/09.jpg?raw=true" alt=""></figure></p>
<h3 id="第三部分：命令模式切换到末行指令模式的可以用按键说明"><a href="#第三部分：命令模式切换到末行指令模式的可以用按键说明" class="headerlink" title="第三部分：命令模式切换到末行指令模式的可以用按键说明"></a>第三部分：命令模式切换到末行指令模式的可以用按键说明</h3><p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-vim/10.jpg?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;特别注意，在 vim 中，数字是很有意义的！数字通常代表重复做几次的意思！也有可能是代表去到第几个的意思。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;举例来说，要删除50行，则是用<code>50dd</code>，数字加在动作之前；要向下移动20行，<code>20j</code>或是<code>20↓</code>即可。</p>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/73. Linux 命令- yum/">Linux 命令- yum</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;yum（ Yellow dog Updater, Modified）是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;基於RPM包管理，能够从指定的服务器自动下载RPM包并且安装，可以自动处理依赖性关系，并且一次安装所有依赖的软体包，无须繁琐地一次次下载、安装。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令，而且命令简洁而又好记。</p>
<h2 id="yum-语法"><a href="#yum-语法" class="headerlink" title="yum 语法"></a>yum 语法</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum [options] [<span class="built_in">command</span>] [package ...]</div></pre></td></tr></table></figure>
<ul>
<li>options：可选，选项包括-h（帮助），-y（当安装过程提示选择全部为”yes”），-q（不显示安装的过程）等等。</li>
<li>command：要进行的操作。</li>
<li>package操作的对象。</li>
</ul>
<h2 id="yum常用命令"><a href="#yum常用命令" class="headerlink" title="yum常用命令"></a>yum常用命令</h2><ul>
<li>列出所有可更新的软件清单命令：yum check-update</li>
<li>更新所有软件命令：yum update</li>
<li>仅安装指定的软件命令：yum install <package_name></package_name></li>
<li>仅更新指定的软件命令：yum update <package_name></package_name></li>
<li>列出所有可安裝的软件清单命令：yum list</li>
<li>删除软件包命令：yum remove <package_name></package_name></li>
<li>查找软件包 命令：yum search <keyword></keyword></li>
<li>清除缓存命令:<ul>
<li>yum clean packages: 清除缓存目录下的软件包</li>
<li>yum clean headers: 清除缓存目录下的 headers</li>
<li>yum clean oldheaders: 清除缓存目录下旧的 headers</li>
<li>yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers</li>
</ul>
</li>
</ul>
<h2 id="使用实例"><a href="#使用实例" class="headerlink" title="使用实例"></a>使用实例</h2><h3 id="实例1：安装-pam-devel"><a href="#实例1：安装-pam-devel" class="headerlink" title="实例1：安装 pam-devel"></a>实例1：安装 pam-devel</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># yum install pam-devel</span></div><div class="line">Setting up Install Process</div><div class="line">Parsing package install arguments</div><div class="line">Resolving Dependencies  &lt;==先检查软件的属性相依问题</div><div class="line">--&gt; Running transaction check</div><div class="line">---&gt; Package pam-devel.i386 0:0.99.6.2-4.el5 <span class="built_in">set</span> to be updated</div><div class="line">--&gt; Processing Dependency: pam = 0.99.6.2-4.el5 <span class="keyword">for</span> package: pam-devel</div><div class="line">--&gt; Running transaction check</div><div class="line">---&gt; Package pam.i386 0:0.99.6.2-4.el5 <span class="built_in">set</span> to be updated</div><div class="line">filelists.xml.gz          100% |=========================| 1.6 MB    00:05</div><div class="line">filelists.xml.gz          100% |=========================| 138 kB    00:00</div><div class="line">-&gt; Finished Dependency Resolution</div><div class="line">……(省略)</div></pre></td></tr></table></figure>
<h3 id="实例2-移除-pam-devel"><a href="#实例2-移除-pam-devel" class="headerlink" title="实例2:移除 pam-devel"></a>实例2:移除 pam-devel</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># yum remove pam-devel</span></div><div class="line">Setting up Remove Process</div><div class="line">Resolving Dependencies  &lt;==同样的，先解决属性相依的问题</div><div class="line">--&gt; Running transaction check</div><div class="line">---&gt; Package pam-devel.i386 0:0.99.6.2-4.el5 <span class="built_in">set</span> to be erased</div><div class="line">--&gt; Finished Dependency Resolution</div><div class="line"></div><div class="line">Dependencies Resolved</div><div class="line"></div><div class="line">=============================================================================</div><div class="line"> Package                 Arch       Version          Repository        Size</div><div class="line">=============================================================================</div><div class="line">Removing:</div><div class="line"> pam-devel               i386       0.99.6.2-4.el5   installed         495 k</div><div class="line"></div><div class="line">Transaction Summary</div><div class="line">=============================================================================</div><div class="line">Install      0 Package(s)</div><div class="line">Update       0 Package(s)</div><div class="line">Remove       1 Package(s)  &lt;==还好，并没有属性相依的问题，单纯移除一个软件</div><div class="line"></div><div class="line">Is this ok [y/N]: y</div><div class="line">Downloading Packages:</div><div class="line">Running rpm_check_debug</div><div class="line">Running Transaction Test</div><div class="line">Finished Transaction Test</div><div class="line">Transaction Test Succeeded</div><div class="line">Running Transaction</div><div class="line">  Erasing   : pam-devel                    <span class="comment">######################### [1/1]</span></div><div class="line"></div><div class="line">Removed: pam-devel.i386 0:0.99.6.2-4.el5</div><div class="line">Complete!</div></pre></td></tr></table></figure>
<h3 id="实例3-利用-yum-的功能，找出以-pam-为开头的软件名称有哪些？"><a href="#实例3-利用-yum-的功能，找出以-pam-为开头的软件名称有哪些？" class="headerlink" title="实例3:利用 yum 的功能，找出以 pam 为开头的软件名称有哪些？"></a>实例3:利用 yum 的功能，找出以 pam 为开头的软件名称有哪些？</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line">[root@www ~]<span class="comment"># yum list pam*</span></div><div class="line">Installed Packages</div><div class="line">pam.i386                  0.99.6.2-3.27.el5      installed</div><div class="line">pam_ccreds.i386           3-5                    installed</div><div class="line">pam_krb5.i386             2.2.14-1               installed</div><div class="line">pam_passwdqc.i386         1.0.2-1.2.2            installed</div><div class="line">pam_pkcs11.i386           0.5.3-23               installed</div><div class="line">pam_smb.i386              1.1.7-7.2.1            installed</div><div class="line">Available Packages &lt;==底下则是『可升级』的或『未安装』的</div><div class="line">pam.i386                  0.99.6.2-4.el5         base</div><div class="line">pam-devel.i386            0.99.6.2-4.el5         base</div><div class="line">pam_krb5.i386             2.2.14-10              base</div></pre></td></tr></table></figure>
<h2 id="国内-yum-源"><a href="#国内-yum-源" class="headerlink" title="国内 yum 源"></a>国内 yum 源</h2><h3 id="阿里yum源安装"><a href="#阿里yum源安装" class="headerlink" title="阿里yum源安装"></a>阿里yum源安装</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;阿里云与yum源是国内最好的yum源之一。</p>
<h4 id="备份"><a href="#备份" class="headerlink" title="备份"></a>备份</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup</div></pre></td></tr></table></figure>
<h4 id="下载新的CentOS-Base-repo-到-etc-yum-repos-d"><a href="#下载新的CentOS-Base-repo-到-etc-yum-repos-d" class="headerlink" title="下载新的CentOS-Base.repo 到/etc/yum.repos.d/"></a>下载新的CentOS-Base.repo 到/etc/yum.repos.d/</h4><h5 id="CentOS-5"><a href="#CentOS-5" class="headerlink" title="CentOS 5"></a>CentOS 5</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo</div></pre></td></tr></table></figure>
<h5 id="CentOS-6"><a href="#CentOS-6" class="headerlink" title="CentOS 6"></a>CentOS 6</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo</div></pre></td></tr></table></figure>
<h5 id="CentOS-7"><a href="#CentOS-7" class="headerlink" title="CentOS 7"></a>CentOS 7</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo</div></pre></td></tr></table></figure>
<h3 id="之后运行yum-makecache生成缓存"><a href="#之后运行yum-makecache生成缓存" class="headerlink" title="之后运行yum makecache生成缓存"></a>之后运行yum makecache生成缓存</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">yum clean all</div><div class="line">yum makecache</div></pre></td></tr></table></figure>
<h3 id="网易yum源安装"><a href="#网易yum源安装" class="headerlink" title="网易yum源安装"></a>网易yum源安装</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;网易（163）yum源是国内最好的yum源之一 ，无论是速度还是软件版本，都非常的不错。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;将yum源设置为163 yum，可以提升软件包安装和更新的速度，同时避免一些常见软件版本无法找到。</p>
<h4 id="安装步骤"><a href="#安装步骤" class="headerlink" title="安装步骤"></a>安装步骤</h4><h5 id="首先备份-etc-yum-repos-d-CentOS-Base-repo"><a href="#首先备份-etc-yum-repos-d-CentOS-Base-repo" class="headerlink" title="首先备份/etc/yum.repos.d/CentOS-Base.repo"></a>首先备份/etc/yum.repos.d/CentOS-Base.repo</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup</div></pre></td></tr></table></figure>
<h5 id="下载对应版本repo文件-放入-etc-yum-repos-d-操作前请做好相应备份"><a href="#下载对应版本repo文件-放入-etc-yum-repos-d-操作前请做好相应备份" class="headerlink" title="下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)"></a>下载对应版本repo文件, 放入/etc/yum.repos.d/(操作前请做好相应备份)</h5><ul>
<li>CentOS5 ：<a href="http://mirrors.163.com/.help/CentOS5-Base-163.repo" target="_blank" rel="external">http://mirrors.163.com/.help/CentOS5-Base-163.repo</a></li>
<li>CentOS6 ：<a href="http://mirrors.163.com/.help/CentOS6-Base-163.repo" target="_blank" rel="external">http://mirrors.163.com/.help/CentOS6-Base-163.repo</a></li>
</ul>
<h5 id="运行以下命令生成缓存"><a href="#运行以下命令生成缓存" class="headerlink" title="运行以下命令生成缓存"></a>运行以下命令生成缓存</h5><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">yum clean all</div><div class="line">yum makecache</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;除了阿里和网易之外，国内还有其他不错的yum源，比如中科大和搜狐。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;中科大的yum源，安装方法查看：<a href="https://lug.ustc.edu.cn/wiki/mirrors/help/centos" target="_blank" rel="external">https://lug.ustc.edu.cn/wiki/mirrors/help/centos</a></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sohu的yum源安装方法查看: <a href="http://mirrors.sohu.com/help/centos.html" target="_blank" rel="external">http://mirrors.sohu.com/help/centos.html</a></p>
<h2 id="配置本地yum仓库"><a href="#配置本地yum仓库" class="headerlink" title="配置本地yum仓库"></a>配置本地yum仓库</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;实现此案例需要按照如下步骤进行。</p>
<h3 id="步骤一：搭建一个本地Yum，将RHEL6光盘手动挂载到-media"><a href="#步骤一：搭建一个本地Yum，将RHEL6光盘手动挂载到-media" class="headerlink" title="步骤一：搭建一个本地Yum，将RHEL6光盘手动挂载到/media"></a>步骤一：搭建一个本地Yum，将RHEL6光盘手动挂载到/media</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;命令操作如下所示：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># mount /dev/cdrom /media/</span></div><div class="line">mount: block device /dev/sr0 is write-protected, mounting <span class="built_in">read</span>-only</div><div class="line">[root@localhost ~]<span class="comment"># mount | tail -1</span></div><div class="line">/dev/sr0 on /media <span class="built_in">type</span> iso9660 (ro)</div></pre></td></tr></table></figure>
<h3 id="步骤二：将本地设置为客户端，进行Yum验证"><a href="#步骤二：将本地设置为客户端，进行Yum验证" class="headerlink" title="步骤二：将本地设置为客户端，进行Yum验证"></a>步骤二：将本地设置为客户端，进行Yum验证</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Yum客户端需编辑配置文件，命令操作如下所示：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># cd /etc/yum.repos.d/         //必须在这个路径下</span></div><div class="line">[root@localhost yum.repos.d]<span class="comment"># ls                  //此路径下事先有配置文件的模板</span></div><div class="line">rhel-source.repo</div><div class="line"></div><div class="line">[root@localhost yum.repos.d]<span class="comment"># cp rhel-source.repo rhel6.repo //配置文件必须以.repo结尾</span></div><div class="line">[root@localhost yum.repos.d]<span class="comment"># vim rhel6.repo</span></div><div class="line">[rhel-6]                                     //中括号里内容要求唯一，但不要出现特殊字符</div><div class="line">name=Red Hat Enterprise Linux 6           //此为描述信息，可以看情况填写</div><div class="line">baseurl=file:///media/                     //此项为yum软件仓库位置，指向光盘挂载点</div><div class="line">enabled=1                                   //此项为是否开启，1为开启0为不开启</div><div class="line">gpgcheck=1                                  //此项为是否检查签名，1为监测0为不检测</div><div class="line">gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release  //签名认证信息的路径</div><div class="line"></div><div class="line">[root@localhost /]<span class="comment"># yum repolist</span></div><div class="line">Loaded plugins: product-id, refresh-packagekit, security, subscription-manager</div><div class="line">This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.</div><div class="line">rhel-6                                            | 3.9 kB     00:00 ... </div><div class="line">rhel-6/primary_db                                  | 3.1 MB     00:00 ... </div><div class="line">repo id             repo name                                     status</div><div class="line">rhel-6              Red Hat Enterprise Linux 6                    3,690</div><div class="line">repolist: 3,690</div></pre></td></tr></table></figure>
<h2 id="yum安装“epel”扩展源"><a href="#yum安装“epel”扩展源" class="headerlink" title="yum安装“epel”扩展源"></a>yum安装“epel”扩展源</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;使用yum安装rpm包时，经常遇到一些包没有，这时候你可以尝试安装epel的扩展源，这里有很多系统不自带的rpm包。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># yum install -y epel-release</span></div><div class="line">[root@localhost ~]<span class="comment"># yum list</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;你会发现最右侧出现很多epel的rpm包。</p>
<h3 id="阿里云扩展源："><a href="#阿里云扩展源：" class="headerlink" title="阿里云扩展源："></a>阿里云扩展源：</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;下载</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;也可以rpm安装</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -ivh http://mirrors.zju.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm</div></pre></td></tr></table></figure>
<h2 id="Remi源"><a href="#Remi源" class="headerlink" title="Remi源"></a>Remi源</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;安装REMI仓库之前，需要启用EPEL仓库，因为REMI中的一些包依赖于EPEL仓库</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在CentOS 7上:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi</div><div class="line">rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在CentOS 6上:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi</div><div class="line">rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;默认地，REMI是禁用的。要检查REMI是否已经成功安装，使用这个命令。你会看到几个REMI仓库，比如remi、remi-php55和remi-php56。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum repolist disabled|grep remi</div></pre></td></tr></table></figure>
<h3 id="从REMI仓库中安装一个包"><a href="#从REMI仓库中安装一个包" class="headerlink" title="从REMI仓库中安装一个包"></a>从REMI仓库中安装一个包</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如上所述，最好保持禁用REMI仓库，只有在需要的时候再启用。<br>要搜索或安装REMI仓库中的包，使用这些命令:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">yum --enablerepo=remi search &lt;keyword&gt;</div><div class="line">yum --enablerepo=remi install &lt;package-name&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://rpms.famillecollet.com/" target="_blank" rel="external">Remi下载地址</a></p>
<ul>
<li>列出可用: yum repolist enabled</li>
<li>列出禁用: yum repolist disabled</li>
<li>列出所有(默认): yum repolist all</li>
<li>列出一个 repo 源(remi) 中可用的包 </li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum --disablerepo=<span class="string">"*"</span> --enablerepo=<span class="string">"ksplice-uptrack"</span> list available</div></pre></td></tr></table></figure>
<h2 id="yum保留下载个rpm包"><a href="#yum保留下载个rpm包" class="headerlink" title="yum保留下载个rpm包"></a>yum保留下载个rpm包</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;可以设置使yum保留已经下载的rpm包，供以后升级或重新安装时使用。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;修改/etc/yum.conf即可</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[main]</div><div class="line">cachedir=/home/soft1/yumcache</div><div class="line">keepcache=1</div><div class="line">debuglevel=2</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;chchedir是放置下载的包的地方，可以修改为自己想放置的位置。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;keepcache为1时表示保存已经下载的rpm包。</p>
<h3 id="yum如何下载rpm包到本地"><a href="#yum如何下载rpm包到本地" class="headerlink" title="yum如何下载rpm包到本地"></a>yum如何下载rpm包到本地</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;首先要安装一个小插件，<code>yum-plugin-downloadonly.noarch</code> ，不知道包名用 <code>yum -list |grep download</code>搜索</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum install -y yum-plugin-downloadonly.noarch</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;然后就可以下载了：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum install vte  --downloadonly --downloaddir=/tmp</div></pre></td></tr></table></figure>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line"></div><div class="line">&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;下载vte到指定/tmp下</div><div class="line"></div><div class="line">&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;如果已安装过的包这个小插件默认是不能下载的,我们可以用 reinstall 下载，如下图例：</div><div class="line"></div><div class="line">![](https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-yum/01.png?raw=true)</div><div class="line"></div><div class="line">```bash</div><div class="line">yum reinstall vim --downloadonly --downloaddir=/tmp</div></pre></td></tr></table></figure>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/linux%E5%91%BD%E4%BB%A4-yum/02.png?raw=true" alt=""></figure></p>
<h2 id="yum配置"><a href="#yum配置" class="headerlink" title="yum配置"></a>yum配置</h2><h3 id="etc-yum-conf配置详解："><a href="#etc-yum-conf配置详解：" class="headerlink" title="/etc/yum.conf配置详解："></a>/etc/yum.conf配置详解：</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div></pre></td><td class="code"><pre><div class="line">cachedir=/var/cache/yum         <span class="comment">#yum下载的RPM包的缓存目录</span></div><div class="line">keepcache=0              <span class="comment">#缓存是否保存，1保存，0不保存。</span></div><div class="line">debuglevel=2             <span class="comment">#调试级别(0-10)，默认为2(具体调试级别的应用，我也不了解)。</span></div><div class="line">logfile=/var/<span class="built_in">log</span>/yum.log         <span class="comment">#yum的日志文件所在的位置</span></div><div class="line">exactarch=1             <span class="comment">#在更新的时候，是否允许更新不同版本的RPM包，比如是否在i386上更新i686 </span></div><div class="line">                                   的RPM包。</div><div class="line">obsoletes=1            <span class="comment">#这是一个update的参数，具体请参阅yum(8)，简单的说就是相当于upgrade，                  允许更新陈旧的RPM包。</span></div><div class="line">gpgcheck=1            <span class="comment">#是否检查GPG(GNU Private Guard)，一种密钥方式签名。</span></div><div class="line">plugins=1                <span class="comment">#是否允许使用插件，默认是0不允许，但是我们一般会用yum-fastestmirror这</span></div><div class="line">                                  个插件。</div><div class="line">installonly_limit=3        <span class="comment">#允许保留多少个内核包。</span></div><div class="line">exclude=selinux*          <span class="comment">#屏蔽不想更新的RPM包，可用通配符，多个RPM包之间使用空格分离。</span></div><div class="line"></div><div class="line">/etc/yum.repos.d/ *.repo</div><div class="line">[fedora]      <span class="comment">#方括号里面的是软件源的名称，将被yum取得并识别</span></div><div class="line">name=Fedora <span class="variable">$releasever</span> - <span class="variable">$basearch</span>   <span class="comment">#这里也定义了软件 仓库的名称，通常是为了方便阅读配置文件，一般没什么作用，$releasever变量定义了发行版本，通常是8，9，10等数字，$basearch变 量定义了系统的架构，可以是i386、x86_64、ppc等值，这两个变量根据当前系统的版本架构不同而有不同的取值，这可以方便yum升级的时候选择 适合当前系统的软件包，以下同……</span></div><div class="line">failovermethod=priority   <span class="comment">#failovermethod 有两个值可以选择，priority是默认值，表示从列出的baseurl中顺序选择镜像服务器地址，roundrobin表示在列出的服务器中随机选择</span></div><div class="line">exclude=compiz* *compiz* fusion-icon* <span class="comment">#exclude这个选项是后来我自己加上去的，用来禁止这个软件仓库中的某些软件包的安装和更新，可以使用通配符，并以空格分隔，可以视情况需要自行添加</span></div><div class="line"><span class="comment">#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/</span></div><div class="line"><span class="comment">#上面的一行baseurl第一个字符是'#'表示该行已经被注释，将不会被读取，这一行的意思是指定一个baseurl（源的镜像服务器地址）</span></div><div class="line"><span class="comment">#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&amp;arch=$basearch</span></div><div class="line"><span class="comment">#上面的这一行是指定一个镜像服务器的地址列表，通常是开启的，本例中加了注释符号禁用了，我们可以试试，将$releasever和$basearch替换成自己对应的版本和架构，例如10和i386，在浏览器中打开，我们就能看到一长串镜可用的镜像服务器地址列表。</span></div><div class="line">选择自己访问速度较快的镜像服务器地址复制并粘贴到repo文件中，我们就能获得较快的更新速度了，格式如下baseurl所示：</div><div class="line">baseurl=</div><div class="line">ftp://ftp.sfc.wide.ad.jp/pub/Linux/Fedora/releases/10/Everything/i386/os</div><div class="line">http://ftp.chg.ru/pub/Linux/fedora/linux/releases/10/Everything/i386/os</div><div class="line">http://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora/linux/releases/10/Everything/i386/os</div><div class="line">http://mirror.nus.edu.sg/fedora/releases/10/Everything/i386/os</div><div class="line">http://mirror.yandex.ru/fedora/linux/releases/10/Everything/i386/os</div><div class="line">http://ftp.twaren.net/Linux/Fedora/linux/releases/10/Everything/i386/os</div><div class="line">http://ftp.itu.edu.tr/Mirror/Fedora/linux/releases/10/Everything/i386/os</div><div class="line">enabled=1 <span class="comment">#这个选项表示这个repo中定义的源是启用的，0为禁用</span></div><div class="line">gpgcheck=1 <span class="comment">#这个选项表示这个repo中下载的rpm将进行gpg的校验，已确定rpm包的来源是有效和安全的</span></div><div class="line">gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-<span class="variable">$basearch</span> <span class="comment">#定义用于校验的gpg密钥</span></div></pre></td></tr></table></figure>
	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/71. Linux 命令- awk/">Linux 命令- awk</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a> <a class="article__tag-link" href="/tags/正则表达式/">正则表达式</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;awk 是一种处理文本文件的语言，是一个强大的文本分析工具。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;之所以叫AWK是因为其取了三位创始人 Alfred Aho，Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。</p>
<h2 id="1-命令格式"><a href="#1-命令格式" class="headerlink" title="1. 命令格式"></a>1. 命令格式</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">awk [选项参数] <span class="string">'script'</span> var=value file(s)</div><div class="line">awk [选项参数] -f script var=value file(s)</div></pre></td></tr></table></figure>
<h2 id="2-命令参数"><a href="#2-命令参数" class="headerlink" title="2. 命令参数"></a>2. 命令参数</h2><ul>
<li>-F fs or –field-separator fs<br>指定输入文件折分隔符，fs是一个字符串或者是一个正则表达式，如-F:。</li>
<li>-v var=value or –asign var=value<br>赋值一个用户定义变量。</li>
<li>-f scripfile or –file scriptfile<br>从脚本文件中读取awk命令。</li>
<li>-mf nnn and -mr nnn<br>对nnn值设置内在限制，-mf选项限制分配给nnn的最大块数目；-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能，在标准awk中不适用。</li>
<li>-W compact or –compat, -W traditional or –traditional<br>在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样，所有的awk扩展都被忽略。</li>
<li>-W copyleft or –copyleft, -W copyright or –copyright<br>打印简短的版权信息。</li>
<li>-W help or –help, -W usage or –usage<br>打印全部awk选项和每个选项的简短说明。</li>
<li>-W lint or –lint<br>打印不能向传统unix平台移植的结构的警告。</li>
<li>-W lint-old or –lint-old<br>打印关于不能向传统unix平台移植的结构的警告。</li>
<li>-W posix<br>打开兼容模式。但有以下限制，不识别：/x、函数关键字、func、换码序列以及当fs是一个空格时，将新行作为一个域分隔符；操作符**和**=不能代替\^和^=；fflush无效。</li>
<li>-W re-interval or –re-inerval<br>允许间隔正则表达式的使用，参考(grep中的Posix字符类)，如括号表达式[[:alpha:]]。</li>
<li>-W source program-text or –source program-text<br>使用program-text作为源代码，可与-f命令混用。</li>
<li>-W version or –version<br>打印bug报告信息的版本。</li>
</ul>
<h2 id="3-基本用法"><a href="#3-基本用法" class="headerlink" title="3. 基本用法"></a>3. 基本用法</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;log.txt 文本内容如下</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">2 this is a <span class="built_in">test</span></div><div class="line">3 Are you like awk</div><div class="line">This<span class="string">'s a test</span></div><div class="line"><span class="string">10 There are orange,apple,mongo</span></div></pre></td></tr></table></figure>
<h3 id="用法一"><a href="#用法一" class="headerlink" title="用法一"></a>用法一</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">awk <span class="string">'&#123;[pattern] action&#125;'</span> &#123;filenames&#125;</div></pre></td></tr></table></figure>
<h4 id="实例：每行按空格或TAB分割，输出文本中的1、4行"><a href="#实例：每行按空格或TAB分割，输出文本中的1、4行" class="headerlink" title="实例：每行按空格或TAB分割，输出文本中的1、4行"></a>实例：每行按空格或TAB分割，输出文本中的1、4行</h4><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '&#123;print $1,$4&#125;' log.txt                </span></div><div class="line">2 a</div><div class="line">3 like</div><div class="line">This<span class="string">'s </span></div><div class="line"><span class="string">10 orange,apple,mongo</span></div><div class="line"><span class="string">[root@localhost ~]# awk '</span>&#123;<span class="built_in">printf</span> <span class="string">"%-8s %-10s\n"</span>,<span class="variable">$1</span>,<span class="variable">$4</span>&#125;<span class="string">' log.txt  #格式化输出</span></div><div class="line"><span class="string">2        a         </span></div><div class="line"><span class="string">3        like      </span></div><div class="line"><span class="string">This'</span>s             </div><div class="line">10       orange,apple,mongo</div></pre></td></tr></table></figure>
<h3 id="用法二"><a href="#用法二" class="headerlink" title="用法二"></a>用法二</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">awk -F</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;-F 相当于内置变量 FS ，指定分隔字符</p>
<h4 id="实例：使用分隔符截取文档某段"><a href="#实例：使用分隔符截取文档某段" class="headerlink" title="实例：使用分隔符截取文档某段"></a>实例：使用分隔符截取文档某段</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk -F, '&#123;print $1,$2&#125;' log.txt   #使用“,”分割</span></div><div class="line">2 this is a <span class="built_in">test</span> </div><div class="line">3 Are you like awk </div><div class="line">This<span class="string">'s a test </span></div><div class="line"><span class="string">10 There are orange apple</span></div><div class="line"><span class="string">[root@localhost ~]# awk '</span>BEGIN&#123;FS=<span class="string">","</span>&#125; &#123;<span class="built_in">print</span> <span class="variable">$1</span>,<span class="variable">$2</span>&#125;<span class="string">' log.txt     #使用内建变量</span></div><div class="line"><span class="string">2 this is a test </span></div><div class="line"><span class="string">3 Are you like awk </span></div><div class="line"><span class="string">This'</span>s a <span class="built_in">test</span> </div><div class="line">10 There are orange apple</div><div class="line">[root@localhost ~]<span class="comment"># awk -F '[ ,]' '&#123;print $1,$2,$5&#125;' log.txt      #使用多个分隔符，先使用空格分割，然后对分割结果再使用“,”分割</span></div><div class="line">2 this <span class="built_in">test</span></div><div class="line">3 Are awk</div><div class="line">This<span class="string">'s a </span></div><div class="line"><span class="string">10 There apple</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;-F 选项的作用是指定分隔符，如果不加 -F 指定，则以空格或者 tab 为分隔符。print 为打印的动作，用来打印出某个字段。$1 为第一个字段，$2 为第二个字段，以此类推，有一个特殊的就是 $0 ，它表示整行。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;也可以使用自定义字符连接每个段，awk 的格式，-F 后紧跟单引号，然后里面为分隔符，print 的动作要用 {} 括起来，否则会报错。print 还可以打印自定义的内容，但是自定义的内容要用双引号括起来。</p>
<h3 id="用法三"><a href="#用法三" class="headerlink" title="用法三"></a>用法三</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">awk -v</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;-v 设置变量</p>
<h4 id="实例："><a href="#实例：" class="headerlink" title="实例："></a>实例：</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk -v a=1 '&#123;print $1,$1+a&#125;' log.txt</span></div><div class="line">2 3</div><div class="line">3 4</div><div class="line">This<span class="string">'s 1</span></div><div class="line"><span class="string">10 11</span></div><div class="line"><span class="string">[root@localhost ~]# awk -v a=1 -v b=a '</span>&#123;<span class="built_in">print</span> <span class="variable">$1</span>,<span class="variable">$1</span>+a,<span class="variable">$1b</span>&#125;<span class="string">' log.txt</span></div><div class="line"><span class="string">2 3 2a</span></div><div class="line"><span class="string">3 4 3a</span></div><div class="line"><span class="string">This'</span>s 1 This<span class="string">'sa</span></div><div class="line"><span class="string">10 11 10a</span></div></pre></td></tr></table></figure>
<h3 id="用法四"><a href="#用法四" class="headerlink" title="用法四"></a>用法四</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">awk -f &#123;awk脚本&#125; [文件名]</div></pre></td></tr></table></figure>
<h4 id="实例"><a href="#实例" class="headerlink" title="实例"></a>实例</h4><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">awk -f cal.awk log.txt</div></pre></td></tr></table></figure>
<h2 id="运算符"><a href="#运算符" class="headerlink" title="运算符"></a>运算符</h2><table>
<thead>
<tr>
<th>运算符</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>= += -= <em>= /= %= ^= *</em>=</td>
<td>赋值</td>
</tr>
<tr>
<td>?:</td>
<td>C条件表达式</td>
</tr>
<tr>
<td>\</td>
<td>\</td>
<td></td>
<td>逻辑或</td>
</tr>
<tr>
<td>&amp;&amp;</td>
<td>逻辑与</td>
</tr>
<tr>
<td>~ ~!</td>
<td>匹配正则表达式和不匹配正则表达式</td>
</tr>
<tr>
<td>&lt; &lt;= &gt; &gt;= != ==</td>
<td>关系运算符</td>
</tr>
<tr>
<td>空格</td>
<td>连接</td>
</tr>
<tr>
<td>+ -</td>
<td>加，减</td>
</tr>
<tr>
<td>* / %</td>
<td>乘，除与求余</td>
</tr>
<tr>
<td>+ - !</td>
<td>一元加，减和逻辑非</td>
</tr>
<tr>
<td>^ <em>*</em></td>
<td>求幂</td>
</tr>
<tr>
<td>++ –</td>
<td>增加或减少，作为前缀或后缀</td>
</tr>
<tr>
<td>$</td>
<td>字段引用</td>
</tr>
<tr>
<td>in</td>
<td>数组成员</td>
</tr>
</tbody>
</table>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;过滤第一列大于2的行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '$1&gt;2' log.txt</span></div><div class="line">3 Are you like awk</div><div class="line">This<span class="string">'s a test</span></div><div class="line"><span class="string">10 There are orange,apple,mongo</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;过滤第一列等于2的行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '$1==2 &#123;print $1,$3&#125;' log.txt</span></div><div class="line">2 is</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;过滤第一列大于2并且第二列等于 ‘Are’的行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '$1&gt;2 &amp;&amp; $2=="Are" &#123;print $1,$2,$3&#125;' log.txt</span></div><div class="line">3 Are you</div></pre></td></tr></table></figure>
<h2 id="内建变量"><a href="#内建变量" class="headerlink" title="内建变量"></a>内建变量</h2><table>
<thead>
<tr>
<th>变量</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>\$n</td>
<td>当前记录的第n个字段，字段间由FS分割</td>
</tr>
<tr>
<td>\$0</td>
<td>完整的输入记录</td>
</tr>
<tr>
<td>ARGC</td>
<td>命令行参数的数目</td>
</tr>
<tr>
<td>ARGIND</td>
<td>命令行中当前文件的位置（从0开始算）</td>
</tr>
<tr>
<td>ARGV</td>
<td>包含命令行参数的数组</td>
</tr>
<tr>
<td>CONVFMT</td>
<td>数字转换格式（默认值为%.6g）ENVIRON环境变量关联数组</td>
</tr>
<tr>
<td>ERRNO</td>
<td>最后一个系统错误的描述</td>
</tr>
<tr>
<td>FIELDWIDTHS</td>
<td>字段宽度列表（用空格键分割）</td>
</tr>
<tr>
<td>FILENAME</td>
<td>当前文件名</td>
</tr>
<tr>
<td>FNR</td>
<td>个文件分别计数的行号</td>
</tr>
<tr>
<td>FS</td>
<td>字段分割符（默认是任何空格）</td>
</tr>
<tr>
<td>IGNORECASE</td>
<td>如果为真，则进行忽略大小写的匹配</td>
</tr>
<tr>
<td>NF</td>
<td>输入字段的分隔符</td>
</tr>
<tr>
<td>NR</td>
<td>已经读出的记录数，就是行号，从1开始</td>
</tr>
<tr>
<td>OFMT</td>
<td>数字的输出格式（默认值是%.6g）</td>
</tr>
<tr>
<td>OFS</td>
<td>输出记录分隔符（输出换行符），输出时用指定的符号代替换行符</td>
</tr>
<tr>
<td>ORS</td>
<td>输出记录分隔符（默认值是一个换行符）</td>
</tr>
<tr>
<td>RLENGTH</td>
<td>由 match 函数所匹配的字符串的长度</td>
</tr>
<tr>
<td>RS</td>
<td>记录分隔符（默认是一个换行符）</td>
</tr>
<tr>
<td>RSTART</td>
<td>由 match 函数所匹配的字符串的第一个位置</td>
</tr>
<tr>
<td>SUBSEP</td>
<td>数组下标分隔符（默认值是/034）</td>
</tr>
</tbody>
</table>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div></pre></td><td class="code"><pre><div class="line">$ awk <span class="string">'BEGIN&#123;printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"&#125; &#123;printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS&#125;'</span>  log.txt</div><div class="line">FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS</div><div class="line">---------------------------------------------</div><div class="line">log.txt    2    1         5    1</div><div class="line">log.txt    2    2         5    2</div><div class="line">log.txt    2    3         3    3</div><div class="line">log.txt    2    4         4    4</div><div class="line">$ awk -F\<span class="string">' '</span>BEGIN&#123;<span class="built_in">printf</span> <span class="string">"%4s %4s %4s %4s %4s %4s %4s %4s %4s\n"</span>,<span class="string">"FILENAME"</span>,<span class="string">"ARGC"</span>,<span class="string">"FNR"</span>,<span class="string">"FS"</span>,<span class="string">"NF"</span>,<span class="string">"NR"</span>,<span class="string">"OFS"</span>,<span class="string">"ORS"</span>,<span class="string">"RS"</span>;<span class="built_in">printf</span> <span class="string">"---------------------------------------------\n"</span>&#125; &#123;<span class="built_in">printf</span> <span class="string">"%4s %4s %4s %4s %4s %4s %4s %4s %4s\n"</span>,FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS&#125;<span class="string">'  log.txt</span></div><div class="line"><span class="string">FILENAME ARGC  FNR   FS   NF   NR  OFS  ORS   RS</span></div><div class="line"><span class="string">---------------------------------------------</span></div><div class="line"><span class="string">log.txt    2    1    '</span>    1    1</div><div class="line">log.txt    2    2    <span class="string">'    1    2</span></div><div class="line"><span class="string">log.txt    2    3    '</span>    2    3</div><div class="line">log.txt    2    4    <span class="string">'    1    4</span></div><div class="line"><span class="string"># 输出顺序号 NR, 匹配文本行号</span></div><div class="line"><span class="string">$ awk '</span>&#123;<span class="built_in">print</span> NR,FNR,<span class="variable">$1</span>,<span class="variable">$2</span>,<span class="variable">$3</span>&#125;<span class="string">' log.txt</span></div><div class="line"><span class="string">---------------------------------------------</span></div><div class="line"><span class="string">1 1 2 this is</span></div><div class="line"><span class="string">2 2 3 Are you</span></div><div class="line"><span class="string">3 3 This'</span>s a <span class="built_in">test</span></div><div class="line">4 4 10 There are</div><div class="line"><span class="comment"># 指定输出分割符</span></div><div class="line">$  awk <span class="string">'&#123;print $1,$2,$5&#125;'</span> OFS=<span class="string">" $ "</span>  log.txt</div><div class="line">---------------------------------------------</div><div class="line">2 $ this $ <span class="built_in">test</span></div><div class="line">3 $ Are $ awk</div><div class="line">This<span class="string">'s $ a $</span></div><div class="line"><span class="string">10 $ There $</span></div></pre></td></tr></table></figure>
<h2 id="使用正则，字符串匹配"><a href="#使用正则，字符串匹配" class="headerlink" title="使用正则，字符串匹配"></a>使用正则，字符串匹配</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;输出第二列包含 “th”，并打印第二列与第四列</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '$2 ~ /th/ &#123;print $2,$4&#125;' log.txt</span></div><div class="line">this a</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong> ~ 表示模式开始。//中是模式。</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '/re/' log.txt</span></div><div class="line">3 Are you like awk</div><div class="line">10 There are orange,apple,mongo</div></pre></td></tr></table></figure>
<h2 id="忽略大小写"><a href="#忽略大小写" class="headerlink" title="忽略大小写"></a>忽略大小写</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk 'BEGIN&#123;IGNORECASE=1&#125; /this/' log.txt</span></div><div class="line">2 this is a <span class="built_in">test</span></div><div class="line">This<span class="string">'s a test</span></div></pre></td></tr></table></figure>
<h2 id="模式取反"><a href="#模式取反" class="headerlink" title="模式取反"></a>模式取反</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk '$2 !~ /th/ &#123;print $2,$4&#125;' log.txt</span></div><div class="line">Are like</div><div class="line">a </div><div class="line">There orange,apple,mongo</div><div class="line">[root@localhost ~]<span class="comment"># awk '! /th/ &#123;print $2,$4&#125;' log.txt</span></div><div class="line">Are like</div><div class="line">a </div><div class="line">There orange,apple,mongo</div></pre></td></tr></table></figure>
<h2 id="awk-脚本"><a href="#awk-脚本" class="headerlink" title="awk 脚本"></a>awk 脚本</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;关于 awk 脚本，需要注意两个关键词 BEGIN 和 END。</p>
<ul>
<li>BEGIN {这里面放的是执行前的语句｝</li>
<li>END ｛这里面放的是处理完所有的行后要执行的语句｝</li>
<li>｛这里面放的是处理每一行时要执行的语句｝</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;假设有这么一个文件（学生成绩表）</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># cat score.txt </span></div><div class="line">Marry   2143 78 84 77</div><div class="line">Jack    2321 66 78 45</div><div class="line">Tom     2122 48 77 71</div><div class="line">Mike    2537 87 97 95</div><div class="line">Bob     2415 40 57 62</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;awk 脚本如下</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># cat cal.awk</span></div><div class="line"><span class="comment">#!/bin/awk -f</span></div><div class="line"><span class="comment">#运行前</span></div><div class="line">BEGIN &#123;</div><div class="line">    math = 0</div><div class="line">    english = 0</div><div class="line">    computer = 0</div><div class="line"> </div><div class="line">    <span class="built_in">printf</span> <span class="string">"NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"</span></div><div class="line">    <span class="built_in">printf</span> <span class="string">"---------------------------------------------\n"</span></div><div class="line">&#125;</div><div class="line"><span class="comment">#运行中</span></div><div class="line">&#123;</div><div class="line">    math+=<span class="variable">$3</span></div><div class="line">    english+=<span class="variable">$4</span></div><div class="line">    computer+=<span class="variable">$5</span></div><div class="line">    <span class="built_in">printf</span> <span class="string">"%-6s %-6s %4d %8d %8d %8d\n"</span>, <span class="variable">$1</span>, <span class="variable">$2</span>, <span class="variable">$3</span>,<span class="variable">$4</span>,<span class="variable">$5</span>, <span class="variable">$3</span>+<span class="variable">$4</span>+<span class="variable">$5</span></div><div class="line">&#125;</div><div class="line"><span class="comment">#运行后</span></div><div class="line">END &#123;</div><div class="line">    <span class="built_in">printf</span> <span class="string">"---------------------------------------------\n"</span></div><div class="line">    <span class="built_in">printf</span> <span class="string">"  TOTAL:%10d %8d %8d \n"</span>, math, english, computer</div><div class="line">    <span class="built_in">printf</span> <span class="string">"AVERAGE:%10.2f %8.2f %8.2f\n"</span>, math/NR, english/NR, computer/NR</div><div class="line">&#125;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;执行结果</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># awk -f cal.awk score.txt</span></div><div class="line">NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL</div><div class="line">---------------------------------------------</div><div class="line">Marry  2143     78       84       77      239</div><div class="line">Jack   2321     66       78       45      189</div><div class="line">Tom    2122     48       77       71      196</div><div class="line">Mike   2537     87       97       95      279</div><div class="line">Bob    2415     40       57       62      159</div><div class="line">---------------------------------------------</div><div class="line">  TOTAL:       319      393      350 </div><div class="line">AVERAGE:     63.80    78.60    70.00</div></pre></td></tr></table></figure>
<h2 id="另外一些实例"><a href="#另外一些实例" class="headerlink" title="另外一些实例"></a>另外一些实例</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;awk 的 hello world 程序为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">BEGIN &#123;<span class="built_in">print</span> <span class="string">"Hello, world!"</span>&#125;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;计算文件大小</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># ls -l *.txt | awk '&#123;sum+=$6&#125; END &#123;print sum&#125;'</span></div><div class="line">30</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;从文件中找出长度大于80的行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">awk <span class="string">'lenght&gt;80'</span> log.txt</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;打印九九乘法表</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">seq 9 | sed <span class="string">'H;g'</span> | awk -v RS=<span class="string">''</span> <span class="string">'&#123;for(i=1;i&lt;=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")&#125;'</span></div></pre></td></tr></table></figure>
	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/70. Linux 命令- sed/">Linux 命令- sed</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a> <a class="article__tag-link" href="/tags/正则表达式/">正则表达式</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 命令是利用 script 来处理文本文件。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 可依照 script 的指令来处理、编辑文本文件。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 主要用来自动编辑一个或多个文件；简化对文件的反复操作；编写转换程序等。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 可以实现 grep 的大部分功能，而且还可以查找替换。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 跟 grep 一样，不识别 + 、| 、｛｝、 （）等符号，需要借助脱义符号 、 或者使用选项 -r</p>
<h2 id="1-命令语法"><a href="#1-命令语法" class="headerlink" title="1. 命令语法"></a>1. 命令语法</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sed [-hnV] [-e&lt;script&gt;] [-f&lt;script文件&gt;] [文本文件]</div></pre></td></tr></table></figure>
<h2 id="2-命令参数"><a href="#2-命令参数" class="headerlink" title="2. 命令参数"></a>2. 命令参数</h2><ul>
<li>-e <code>&lt;script&gt;或--expression=&lt;script&gt;</code> 以选项中指定的script来处理输入的文本文件。</li>
<li>-f <script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。</script文件></script文件></li>
<li>-h 或–help 显示帮助。</li>
<li>-n 或–quiet或–silent 仅显示script处理后的结果。</li>
<li>-V 或–version 显示版本信息。</li>
</ul>
<h2 id="3-命令动作"><a href="#3-命令动作" class="headerlink" title="3. 命令动作"></a>3. 命令动作</h2><ul>
<li>a ：新增， a 的后面可以接字串，而这些字串会在新的一行出现(目前的下一行)～</li>
<li>c ：取代， c 的后面可以接字串，这些字串可以取代 n1,n2 之间的行！</li>
<li>d ：删除，因为是删除啊，所以 d 后面通常不接任何咚咚；</li>
<li>i ：插入， i 的后面可以接字串，而这些字串会在新的一行出现(目前的上一行)；</li>
<li>p ：列印，亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行～</li>
<li>s ：取代，可以直接进行取代的工作哩！通常这个 s 的动作可以搭配正规表示法！例如 1,20s/old/new/g 就是啦！</li>
</ul>
<h2 id="4-使用实例"><a href="#4-使用实例" class="headerlink" title="4.使用实例"></a>4.使用实例</h2><h3 id="实例1：在-testfile-文件的第四行后添加一行，并将结果输出到标准输出"><a href="#实例1：在-testfile-文件的第四行后添加一行，并将结果输出到标准输出" class="headerlink" title="实例1：在 testfile 文件的第四行后添加一行，并将结果输出到标准输出"></a>实例1：在 testfile 文件的第四行后添加一行，并将结果输出到标准输出</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sed -e 4a \newLine testfile</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">$ cat testfile </div><div class="line">HELLO LINUX!  </div><div class="line">Linux is a free unix-type opterating system.  </div><div class="line">This is a linux testfile!  </div><div class="line">Linux <span class="built_in">test</span> </div><div class="line">$ sed -e 4a\newline testfile </div><div class="line">HELLO LINUX!   </div><div class="line">Linux is a free unix-type opterating system.  </div><div class="line">This is a linux testfile!  </div><div class="line">Linux <span class="built_in">test</span>  </div><div class="line">newline</div></pre></td></tr></table></figure>
<h2 id="实例2：将-etc-passwd-的内容列出并且列印行号，同时将第2-5行删除"><a href="#实例2：将-etc-passwd-的内容列出并且列印行号，同时将第2-5行删除" class="headerlink" title="实例2：将 /etc/passwd 的内容列出并且列印行号，同时将第2-5行删除"></a>实例2：将 /etc/passwd 的内容列出并且列印行号，同时将第2-5行删除</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'2,5d'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd|sed '2,5d'</span></div><div class="line">     1  root:x:0:0:root:/root:/bin/bash</div><div class="line">     6  sync:x:5:0:sync:/sbin:/bin/sync</div><div class="line">     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown</div><div class="line">     8  halt:x:7:0:halt:/sbin:/sbin/halt</div><div class="line">     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin</div><div class="line">    10  operator:x:11:0:operator:/root:/sbin/nologin</div><div class="line">    11  games:x:12:100:games:/usr/games:/sbin/nologin</div><div class="line">    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin</div><div class="line">    13  nobody:x:99:99:Nobody:/:/sbin/nologin</div><div class="line">    14  systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin</div><div class="line">    15  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin</div><div class="line">    16  dbus:x:81:81:System message bus:/:/sbin/nologin</div><div class="line">    17  polkitd:x:998:996:User <span class="keyword">for</span> polkitd:/:/sbin/nologin</div><div class="line">    18  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin</div><div class="line">    19  postfix:x:89:89::/var/spool/postfix:/sbin/nologin</div><div class="line">    20  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin</div><div class="line">    21  chrony:x:997:995::/var/lib/chrony:/sbin/nologin</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;以行为单位的删除，sed 的动作为 ‘2,5d’，那个 d 就是删除。因为 2-5 行给删除了，所以显示的数据就没有 2-5 行。另外，注意一下，原本应该是要下达 -e 才对，没有 -e 也可以。同时也要注意的是，sed 后面接的动作务必以 ‘’单引号括住。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;只要删除第2行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'2d'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;要删除第3到最后一行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd |sed <span class="string">'3,$d'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在第2行后，第3行上加上 ‘drink tea’ 字样</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'2a drink tea'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果要加再第2行前</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'2i drink tea'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果要在第2行后面加入两行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'2a drink tea \</span></div><div class="line"><span class="string">&gt; drink beer'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;每一行之间都必须要以反斜杠（\）来进行新行的添加</p>
<h3 id="实例3：将第2-5行内容取代成为‘2-5-number’"><a href="#实例3：将第2-5行内容取代成为‘2-5-number’" class="headerlink" title="实例3：将第2-5行内容取代成为‘2-5 number’"></a>实例3：将第2-5行内容取代成为‘2-5 number’</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'2,5c 2-5 number'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd | sed '2,5c 2-5 number'</span></div><div class="line">     1  root:x:0:0:root:/root:/bin/bash</div><div class="line">2-5 number</div><div class="line">     6  sync:x:5:0:sync:/sbin:/bin/sync</div><div class="line">     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown</div><div class="line">     8  halt:x:7:0:halt:/sbin:/sbin/halt</div><div class="line">     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin</div><div class="line">    10  operator:x:11:0:operator:/root:/sbin/nologin</div><div class="line">    11  games:x:12:100:games:/usr/games:/sbin/nologin</div><div class="line">    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin</div><div class="line">    13  nobody:x:99:99:Nobody:/:/sbin/nologin</div><div class="line">    14  systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin</div><div class="line">    15  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin</div><div class="line">    16  dbus:x:81:81:System message bus:/:/sbin/nologin</div><div class="line">    17  polkitd:x:998:996:User <span class="keyword">for</span> polkitd:/:/sbin/nologin</div><div class="line">    18  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin</div><div class="line">    19  postfix:x:89:89::/var/spool/postfix:/sbin/nologin</div><div class="line">    20  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin</div><div class="line">    21  chrony:x:997:995::/var/lib/chrony:/sbin/nologin</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;以行为单位的替换与显示，通过这个方法就能够将数据整行取代了。</p>
<h3 id="实例4：仅列出-etc-passwd-文件内的5-7-行"><a href="#实例4：仅列出-etc-passwd-文件内的5-7-行" class="headerlink" title="实例4：仅列出 /etc/passwd 文件内的5-7 行"></a>实例4：仅列出 /etc/passwd 文件内的5-7 行</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd |sed -n <span class="string">'5,7p'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd | sed -n '5,7p'</span></div><div class="line">     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin</div><div class="line">     6  sync:x:5:0:sync:/sbin:/bin/sync</div><div class="line">     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong><br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果 root 找到，处理输出所有行，还回输出匹配行。<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;使用 -n 的时候将只打印包含模版的行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd | sed -n '/root/p'</span></div><div class="line">     1  root:x:0:0:root:/root:/bin/bash</div><div class="line">    10  operator:x:11:0:operator:/root:/sbin/nologin</div></pre></td></tr></table></figure>
<h3 id="实例5：删除-etc-paawd-所有包含-root-的行，其他行输出"><a href="#实例5：删除-etc-paawd-所有包含-root-的行，其他行输出" class="headerlink" title="实例5：删除 /etc/paawd 所有包含 root 的行，其他行输出"></a>实例5：删除 /etc/paawd 所有包含 root 的行，其他行输出</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed <span class="string">'/root/d'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd | sed '/root/d'</span></div><div class="line">     2  bin:x:1:1:bin:/bin:/sbin/nologin</div><div class="line">     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin</div><div class="line">     4  adm:x:3:4:adm:/var/adm:/sbin/nologin</div><div class="line">     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin</div><div class="line">     6  sync:x:5:0:sync:/sbin:/bin/sync</div><div class="line">     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown</div><div class="line">     8  halt:x:7:0:halt:/sbin:/sbin/halt</div><div class="line">     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin</div><div class="line">    11  games:x:12:100:games:/usr/games:/sbin/nologin</div><div class="line">    12  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin</div><div class="line">    13  nobody:x:99:99:Nobody:/:/sbin/nologin</div><div class="line">    14  systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin</div><div class="line">    15  systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin</div><div class="line">    16  dbus:x:81:81:System message bus:/:/sbin/nologin</div><div class="line">    17  polkitd:x:998:996:User <span class="keyword">for</span> polkitd:/:/sbin/nologin</div><div class="line">    18  tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin</div><div class="line">    19  postfix:x:89:89::/var/spool/postfix:/sbin/nologin</div><div class="line">    20  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin</div><div class="line">    21  chrony:x:997:995::/var/lib/chrony:/sbin/nologin</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数据的搜寻并删除</p>
<h3 id="实例6：搜索-etc-passwd-找到-root-对应的行，执行后面花括号中的命令，每个命令之间用分号分割，并把bash替换为blueshell，在输出这行"><a href="#实例6：搜索-etc-passwd-找到-root-对应的行，执行后面花括号中的命令，每个命令之间用分号分割，并把bash替换为blueshell，在输出这行" class="headerlink" title="实例6：搜索 /etc/passwd 找到 root 对应的行，执行后面花括号中的命令，每个命令之间用分号分割，并把bash替换为blueshell，在输出这行"></a>实例6：搜索 /etc/passwd 找到 root 对应的行，执行后面花括号中的命令，每个命令之间用分号分割，并把bash替换为blueshell，在输出这行</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed -n <span class="string">'/bash/ &#123;s/bash/blueshell/;p;q&#125;'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd | sed -n '/bash/ &#123;s/bash/blueshell/;p;q&#125;'</span></div><div class="line">     1  root:x:0:0:root:/root:/bin/blueshell</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数据的搜寻并执行命令，最后的q是退出</p>
<h3 id="实例7：查找-etc-passwd-内-root-的行，并把-root-替换为-shell"><a href="#实例7：查找-etc-passwd-内-root-的行，并把-root-替换为-shell" class="headerlink" title="实例7：查找 /etc/passwd 内 root 的行，并把 root 替换为 shell"></a>实例7：查找 /etc/passwd 内 root 的行，并把 root 替换为 shell</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">sed <span class="string">'s/root/shell/g'</span> /etc/passwd</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># sed 's/root/shell/g' /etc/passwd</span></div><div class="line">shell:x:0:0:shell:/shell:/bin/bash</div><div class="line">bin:x:1:1:bin:/bin:/sbin/nologin</div><div class="line">daemon:x:2:2:daemon:/sbin:/sbin/nologin</div><div class="line">adm:x:3:4:adm:/var/adm:/sbin/nologin</div><div class="line">lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin</div><div class="line">sync:x:5:0:sync:/sbin:/bin/sync</div><div class="line">shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown</div><div class="line">halt:x:7:0:halt:/sbin:/sbin/halt</div><div class="line">mail:x:8:12:mail:/var/spool/mail:/sbin/nologin</div><div class="line">operator:x:11:0:operator:/shell:/sbin/nologin</div><div class="line">games:x:12:100:games:/usr/games:/sbin/nologin</div><div class="line">ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin</div><div class="line">nobody:x:99:99:Nobody:/:/sbin/nologin</div><div class="line">systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin</div><div class="line">systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin</div><div class="line">dbus:x:81:81:System message bus:/:/sbin/nologin</div><div class="line">polkitd:x:998:996:User <span class="keyword">for</span> polkitd:/:/sbin/nologin</div><div class="line">tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin</div><div class="line">postfix:x:89:89::/var/spool/postfix:/sbin/nologin</div><div class="line">sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin</div><div class="line">chrony:x:997:995::/var/lib/chrony:/sbin/nologin</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数据的搜寻并替换，s 就是替换的意思，g 为全局替换，否则只替换一次。</p>
<h3 id="实例8：使用-ifconfig-查看ip地址，并提取出ip地址"><a href="#实例8：使用-ifconfig-查看ip地址，并提取出ip地址" class="headerlink" title="实例8：使用 ifconfig 查看ip地址，并提取出ip地址"></a>实例8：使用 ifconfig 查看ip地址，并提取出ip地址</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;先使用 ifconfig 命令查询eth0网卡ip</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># ifconfig eth0</span></div><div class="line">eth0      Link encap:Ethernet  HWaddr 00:0C:29:4D:9F:F7  </div><div class="line">          inet addr:192.168.0.73  Bcast:192.168.0.255  Mask:255.255.255.0</div><div class="line">          inet6 addr: fe80::20c:29ff:fe4d:9ff7/64 Scope:Link</div><div class="line">          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1</div><div class="line">          RX packets:41 errors:0 dropped:0 overruns:0 frame:0</div><div class="line">          TX packets:48 errors:0 dropped:0 overruns:0 carrier:0</div><div class="line">          collisions:0 txqueuelen:1000 </div><div class="line">          RX bytes:4525 (4.4 KiB)  TX bytes:5868 (5.7 KiB)</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">ifconfig eth0 | grep <span class="string">'inet addr'</span> | sed <span class="string">'s/^.*addr://g'</span> | sed <span class="string">'s/Bcast.*$//g'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">ifconfig eth0 | grep <span class="string">'inet addr'</span> | sed <span class="string">'s/^.*addr://g'</span> | sed <span class="string">'s/Bcast.*$//g'</span></div><div class="line">192.168.0.73</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;数据的搜寻并替换，先观察原始信息，利用 ficonfig 查询 eth0 网卡 ip，再用 sed 命令将 ip 前面的部分删除（就是把前面的部分替换为空），接下来是删除后续的部分（把后续部分替换为空）</p>
<h3 id="实例9：删除-etc-passwd-第3行到末尾的数据，并把bash-替换为-blueshell"><a href="#实例9：删除-etc-passwd-第3行到末尾的数据，并把bash-替换为-blueshell" class="headerlink" title="实例9：删除 /etc/passwd 第3行到末尾的数据，并把bash 替换为 blueshell"></a>实例9：删除 /etc/passwd 第3行到末尾的数据，并把bash 替换为 blueshell</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">nl /etc/passwd | sed -e <span class="string">'3,$d'</span> -e <span class="string">'s/bash/blueshell/g'</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/g'</span></div><div class="line"></div><div class="line">     1  root:x:0:0:root:/root:/bin/blueshell</div><div class="line">     2  bin:x:1:1:bin:/bin:/sbin/nologin</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;多点编辑，-e 表示多点编辑，第一个编辑命令删除 /etc/passwd 第三行到末行的数据，第二条命令搜索 bash 替换为 blueshell</p>
<h3 id="实例10：直接修改文件内容（危险动作）"><a href="#实例10：直接修改文件内容（危险动作）" class="headerlink" title="实例10：直接修改文件内容（危险动作）"></a>实例10：直接修改文件内容（危险动作）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 可以直接修改文件的内容，不必使用管道命令或数据流重定向。不过，由于这个动作会直接修改到原始的文件，所以千万不要随便拿系统配置文件来测试!</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;先用 cp 命令拷贝一份/etc/passwd 文件为 1.txt</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># cp /etc/passwd 1.txt</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;删除所有非数字</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># sed -i 's/[^0-9]//g' 1.txt</span></div><div class="line">[root@localhost ~]<span class="comment"># cat 1.txt</span></div><div class="line">00</div><div class="line">11</div><div class="line">22</div><div class="line">34</div><div class="line">47</div><div class="line">50</div><div class="line">60</div><div class="line">70</div><div class="line">812</div><div class="line">110</div><div class="line">12100</div><div class="line">1450</div><div class="line">9999</div><div class="line">999997</div><div class="line">192192</div><div class="line">8181</div><div class="line">998996</div><div class="line">5959</div><div class="line">8989</div><div class="line">7474</div><div class="line">997995</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sed 的 -i 选项可以直接修改文件内容，这功能非常有帮助！举例来说，如果有一个100万行的文件，要在第100行加某些文字，此时使用 vim 可能会疯掉！因为文件太大了！就利用 sed ，通过 sed 直接修改、取代的功能，甚至不用使用 vim 去修订。</p>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/7. Linux 命令- touch/">Linux 命令- touch</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;linux的touch命令不常用，一般在使用make的时候可能会用到，用来修改文件时间戳，或者新建一个不存在的文件。</p>
<h2 id="1．命令格式："><a href="#1．命令格式：" class="headerlink" title="1．命令格式："></a>1．命令格式：</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">touch [选项] [文件]</div></pre></td></tr></table></figure>
<h2 id="2．命令参数："><a href="#2．命令参数：" class="headerlink" title="2．命令参数："></a>2．命令参数：</h2><ul>
<li>-a 或–time=atime或–time=access或–time=use 　只更改存取时间。</li>
<li>-c 或–no-create 　不建立任何文档。</li>
<li>-d 使用指定的日期时间，而非现在的时间。</li>
<li>-f 此参数将忽略不予处理，仅负责解决BSD版本touch指令的兼容性问题。</li>
<li>-m&amp; 或–time=mtime或–time=modify 　只更改变动时间。</li>
<li>-r 把指定文档或目录的日期时间，统统设成和参考文档或目录的日期时间相同。</li>
<li>-t 使用指定的日期时间，而非现在的时间。    </li>
</ul>
<h2 id="3．命令功能："><a href="#3．命令功能：" class="headerlink" title="3．命令功能："></a>3．命令功能：</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;touch命令参数可更改文档或目录的日期时间，包括存取时间和更改时间。</p>
<h2 id="4．使用范例："><a href="#4．使用范例：" class="headerlink" title="4．使用范例："></a>4．使用范例：</h2><h3 id="实例1：创建不存在的文件"><a href="#实例1：创建不存在的文件" class="headerlink" title="实例1：创建不存在的文件"></a>实例1：创建不存在的文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令：</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">touch log2012.log log2013.log</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出：</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># touch log2012.log log2013.log</span></div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ll</span></div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2012.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果log2014.log不存在，则不创建文件</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># touch -c log2014.log</span></div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ll</span></div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2012.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log</div></pre></td></tr></table></figure>
<h3 id="实例2：更新log-log的时间和log2012-log时间戳相同"><a href="#实例2：更新log-log的时间和log2012-log时间戳相同" class="headerlink" title="实例2：更新log.log的时间和log2012.log时间戳相同"></a>实例2：更新log.log的时间和log2012.log时间戳相同</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令：</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">touch -r log.log log2012.log</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出：</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ll</span></div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2012.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 14:48 log.log</div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># touch -r log.log log2012.log </span></div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ll</span></div><div class="line">-rw-r--r-- 1 root root    0 10-28 14:48 log2012.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 14:48 log.log</div></pre></td></tr></table></figure>
<h3 id="实例3：设定文件的时间戳"><a href="#实例3：设定文件的时间戳" class="headerlink" title="实例3：设定文件的时间戳"></a>实例3：设定文件的时间戳</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令：</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">touch -t 201211142234.50 log.log</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出：</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div></pre></td><td class="code"><pre><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ll</span></div><div class="line">-rw-r--r-- 1 root root    0 10-28 14:48 log2012.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 14:48 log.log</div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># touch -t 201211142234.50 log.log</span></div><div class="line">[root@localhost <span class="built_in">test</span>]<span class="comment"># ll</span></div><div class="line">-rw-r--r-- 1 root root    0 10-28 14:48 log2012.log</div><div class="line">-rw-r--r-- 1 root root    0 10-28 16:01 log2013.log</div><div class="line">-rw-r--r-- 1 root root    0 2012-11-14 log.log</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明：</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;-t  time 使用指定的时间值 time 作为指定文件相应时间戳记的新值．此处的 time规定为如下形式的十进制数:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[[CC]YY]MMDDhhmm[.SS]</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这里，CC为年数中的前两位，即”世纪数”；YY为年数的后两位，即某世纪中的年数．如果不给出CC的值，则touch   将把年数CCYY限定在1969–2068之内．MM为月数，DD为天将把年数CCYY限定在1969–2068之内．MM为月数，DD为天数，hh 为小时数(几点)，mm为分钟数，SS为秒数．此处秒的设定范围是0–61，这样可以处理闰秒．这些数字组成的时间是环境变量TZ指定的时区中的一个时 间．由于系统的限制，早于1970年1月1日的时间是错误的。</p>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/69. Linux 命令- split/">Linux 命令- split</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;split 命令用于将一个文件分割成数个。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;该指令将大文件分割成较小的文件，在默认情况下将按照每1000行割成一个小文件。</p>
<h2 id="1-命令语法"><a href="#1-命令语法" class="headerlink" title="1. 命令语法"></a>1. 命令语法</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">split [参数] [要切割的文件] [输出文件名]</div></pre></td></tr></table></figure>
<h2 id="2-命令参数"><a href="#2-命令参数" class="headerlink" title="2. 命令参数"></a>2. 命令参数</h2><ul>
<li>&lt;行数&gt; : 指定每多少行切成一个小文件</li>
<li>-b&lt;字节&gt; : 指定每多少字节切成一个小文件</li>
<li>–help : 在线帮助</li>
<li>–version : 显示版本信息</li>
<li>-C&lt;字节&gt; : 与参数”-b”相似，但是在切 割时将尽量维持每行的完整性</li>
<li>[输出文件名] : 设置切割后文件的前置文件名， split会自动在前置文件名后再加上编号</li>
</ul>
<h2 id="3-使用实例"><a href="#3-使用实例" class="headerlink" title="3. 使用实例"></a>3. 使用实例</h2><h3 id="实例1：使用-split-将文件-README-每6行切割成一个文件"><a href="#实例1：使用-split-将文件-README-每6行切割成一个文件" class="headerlink" title="实例1：使用 split 将文件 README 每6行切割成一个文件"></a>实例1：使用 split 将文件 README 每6行切割成一个文件</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">split -6 README</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">$ split -6 README</div><div class="line">$ ls                                </div><div class="line">README xaa xad xag xab xae xah xac xaf xai</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果 split 不指定目标文件名，则会以 xaa、xab……这样的文件名来存取切割后的文件，也可以指定文件名。</p>
<h3 id="实例2：使用-split-将文件-README-以每500字节切割"><a href="#实例2：使用-split-将文件-README-以每500字节切割" class="headerlink" title="实例2：使用 split 将文件 README 以每500字节切割"></a>实例2：使用 split 将文件 README 以每500字节切割</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">split -b500 README</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">$ split -b500 README</div><div class="line">$ ls                                </div><div class="line">README xaa xad xag xab xae xah xac xaf xai</div></pre></td></tr></table></figure>
	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/2. Linux 命令/68. Linux 命令- tr/">Linux 命令- tr</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Linux命令/">Linux命令</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tr 命令用户转换或删除文件中的字符。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tr 指令从标准输入设备读取数据，经过字符串转以后，将结果输出到标准输出设备。</p>
<h2 id="1-命令语法"><a href="#1-命令语法" class="headerlink" title="1. 命令语法"></a>1. 命令语法</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">tr [参数] [第一字符集] [第二字符集]</div><div class="line">tr [OPTION] [SET1] [SET2]</div></pre></td></tr></table></figure>
<h2 id="2-命令参数"><a href="#2-命令参数" class="headerlink" title="2. 命令参数"></a>2. 命令参数</h2><ul>
<li>-c, –complement：反选设定字符。也就是符合 SET1 的部份不做处理，不符合的剩余部份才进行转换</li>
<li>-d, –delete：删除指令字符</li>
<li>-s, –squeeze-repeats：缩减连续重复的字符成指定的单个字符</li>
<li>-t, –truncate-set1：削减 SET1 指定范围，使之与 SET2 设定长度相等</li>
<li>–help：显示程序用法信息</li>
<li>–version：显示程序本身的版本信息</li>
</ul>
<h3 id="字符集合的范围："><a href="#字符集合的范围：" class="headerlink" title="字符集合的范围："></a>字符集合的范围：</h3><ul>
<li>\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)</li>
<li>\\ 反斜杠</li>
<li>\a Ctrl-G 铃声</li>
<li>\b Ctrl-H 退格符</li>
<li>\f Ctrl-L 走行换页</li>
<li>\n Ctrl-J 新行</li>
<li>\r Ctrl-M 回车</li>
<li>\t Ctrl-I tab键</li>
<li>\v Ctrl-X 水平制表符</li>
<li>CHAR1-CHAR2 ：字符范围从 CHAR1 到 CHAR2 的指定，范围的指定以 ASCII 码的次序为基础，只能由小到大，不能由大到小。</li>
<li>[CHAR*] ：这是 SET2 专用的设定，功能是重复指定的字符到与 SET1 相同长度为止</li>
<li>[CHAR*REPEAT] ：这也是 SET2 专用的设定，功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算，以 0 为开始)</li>
<li>[:alnum:] ：所有字母字符与数字</li>
<li>[:alpha:] ：所有字母字符</li>
<li>[:blank:] ：所有水平空格</li>
<li>[:cntrl:] ：所有控制字符</li>
<li>[:digit:] ：所有数字</li>
<li>[:graph:] ：所有可打印的字符(不包含空格符)</li>
<li>[:lower:] ：所有小写字母</li>
<li>[:print:] ：所有可打印的字符(包含空格符)</li>
<li>[:punct:] ：所有标点字符</li>
<li>[:space:] ：所有水平与垂直空格符</li>
<li>[:upper:] ：所有大写字母</li>
<li>[:xdigit:] ：所有 16 进位制的数字</li>
<li>[=CHAR=] ：所有符合指定的字符(等号里的 CHAR，代表你可自订的字符)</li>
</ul>
<h2 id="使用实例"><a href="#使用实例" class="headerlink" title="使用实例"></a>使用实例</h2><h3 id="实例1：将文件testfile-中的小写字母全部转换成大写字母"><a href="#实例1：将文件testfile-中的小写字母全部转换成大写字母" class="headerlink" title="实例1：将文件testfile 中的小写字母全部转换成大写字母"></a>实例1：将文件testfile 中的小写字母全部转换成大写字母</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">cat testfile|tr a-z A-Z</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div></pre></td><td class="code"><pre><div class="line">$ cat testfile         <span class="comment">#testfile原来的内容  </span></div><div class="line">Linux networks are becoming more and more common, </div><div class="line">but scurity is often an overlooked  </div><div class="line">issue. Unfortunately, <span class="keyword">in</span> today’s environment all networks </div><div class="line">are potential hacker targets,  </div><div class="line">fro0m tp-secret military research networks to small home LANs.  </div><div class="line">Linux Network Securty focuses on securing Linux <span class="keyword">in</span> a </div><div class="line">networked environment, <span class="built_in">where</span> the  </div><div class="line">security of the entire network needs to be considered</div><div class="line">rather than just isolated machines.  </div><div class="line">It uses a mix of theory and practicl techniques to </div><div class="line">teach administrators how to install and  </div><div class="line">use security applications, as well as how the </div><div class="line">applcations work and why they are necesary. </div><div class="line">$ cat testfile | tr a-z A-Z <span class="comment">#转换后的输出  </span></div><div class="line">LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED  </div><div class="line">ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,  </div><div class="line">FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.  </div><div class="line">LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE  </div><div class="line">SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.  </div><div class="line">IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND  </div><div class="line">USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY.</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;也可以使用 [:lower:] [:upper:] 参数来实现</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>命令</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">cat testfile|tr [:lower:] [:upper:]</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>输出</strong></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">$ cat testfile | tr [:lower:] [:upper:] <span class="comment">#转换后的输出  </span></div><div class="line">LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED  </div><div class="line">ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,  </div><div class="line">FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.  </div><div class="line">LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE  </div><div class="line">SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.  </div><div class="line">IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND  </div><div class="line">USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY.</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<strong>说明</strong></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;不过替换、删除、以及去重复都是针对一个字符来讲的，哟一定局限性。如果是针对一个字符串就不再管用了</p>

	

	

</article>





	<span class="different-posts">📖 <a href="/page/50">more posts</a> 📖</span>



	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
